Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析


Posted in Python onApril 12, 2019

本文实例讲述了Python面向对象程序设计类变量与成员变量、类方法与成员方法用法。分享给大家供大家参考,具体如下:

类变量与成员变量

在类中声明的变量我们称之为类变量[静态成员变量],

init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量。

类变量直接可以通过类名来调用。

1、若类变量与成员同时存在并且同名

使用对象来调用的时候,获取的结果是成员变量的值,

使用类名来调用,获取的是类变量的值。

2、若类变量存在,成员变量不存在,

使用对象来调用的时候,它首先寻找成员变量,

如果成员变量不存在。则去寻找类变量。

3、若类变量不存在,成员变量存在:

使用类名来调用,则会报错

总结:

类变量通过类名或者对象来调用都不会报错,但是成员变量只能通过对象来调用。

通过对象来修改类属性的时候,只能作用到对象自己本身,作用不到类,

若是通过类名来修改类属性,则只对类变量的值进行修改。

class Person(object):
  # 类变量
  name = "haha"
  age = "19"
  height = 170
  def __init__(self,name,age,weight):
    # 成员变量
    self.name = name
    self.age = age
    self.weight = weight
  def sayHeight(self):
    print(self.height)
per = Person("xiaoming",19,50)
print(per.name)
print(Person.name)
# print(Person.weight)
per.height = 190
print(per.height)
print(Person.height)
print('*********')
Person.height = 200
print(Person.height)
print(per.height)
per.sayHeight()

输出:

xiaoming
haha
190
170
*********
200
190
190

类方法与成员方法

类方法,成员方法

类方法:使用类名来调用的方法

成员方法:使用对象来调用的方法

若一个方法定义在类中,但是没有参数[一般默认self],此时我们只能通过类名来调用

若我们需要使用到一个类的对象,首先要实例化。

class Person(object):
  def __init__(self,name,age):
    self.name = name
    self.age = age
  def say(self):
    print("I am %s, I am %d year old"%(self.name,self.age))
  def sayHello():
    print('hello I am class function')
per = Person("xiaoming",19)
per.say()
Person.sayHello()

输出:

I am xiaoming, I am 19 year old
hello I am class function

类方法与静态方法

静态方法

当调用此方法时,不会将类的实例传递给它。

在类中定义的函数。

无需实例化类,就可以调用。它的定义在继承中,是不可变的。

类方法:

当调用此方法时,将函数所属的类作为第一个参数传递。

class A(object):
    def foo(self, x):
      print("executing foo(%s, %s)" % (self, x))
    @classmethod
    def class_foo(cls, x):
      print("executing class_foo(%s, %s)" % (cls, x))
    @staticmethod
    def static_foo(x):
      print("executing static_foo(%s)" % x)
  a = A()
  # 调用foo函数,参数传入1
  a.foo(1)
  # 调用class_foo,参数传入1
  A.class_foo(1)
  # 调用static_foo,参数传入1
  A.static_foo(1)
  a.static_foo(1):

输出:

executing foo(<__main__.A object at 0x0000024F126489B0>, 1)
executing class_foo(<class '__main__.A'>, 1)
executing static_foo(1)
executing static_foo(1)

下划线

下划线定义特殊的方法,一般情况下是系统定义名字,
如:

__init()____del()__

前双下划线(age):表示私有类型的变量(privated),只能在本类中进行访问,外界不能直接访问。如__age.

单下划线(_age):以单下划线开头的表示保护类型变量(protected),

保护类型的变量只允许本身以及子类访问,不能用于from module import *

[使用单下划线开头的时候,虽然变量能够直接被访问,但是请把变量视为一个保护类型的变量,尽量不要去访问。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
Python找出最小的K个数实例代码
Jan 04 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
python和c语言的主要区别总结
Jul 07 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
python获取命令行参数实例方法讲解
Nov 02 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 #Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 #Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 #Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 #Python
Python实现的银行系统模拟程序完整案例
Apr 12 #Python
详解python--模拟轮盘抽奖游戏
Apr 12 #Python
Python实现的排列组合、破解密码算法示例
Apr 12 #Python
You might like
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP操作xml代码
2010/06/17 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
jQuery链使用指南
2015/01/20 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
详解Python3定时器任务代码
2019/09/23 Python
python实现KNN分类算法
2019/10/16 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
工程造价管理专业大专生求职信
2013/10/06 职场文书
网页美工求职信
2014/02/15 职场文书
文化建设工作方案
2014/05/12 职场文书
工作求职自荐信
2014/06/13 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
婚前财产协议书范本
2014/10/19 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
反邪教观后感
2015/06/11 职场文书
校园新闻稿范文
2015/07/18 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
mysql查询结果实现多列拼接查询
2022/04/03 MySQL