(其他python纪要,请参考:
十二、类属性、静态属性、实例属性、类方法、静态方法、实例方法
类对象对应类名,实例对象就是通过类创建的对象。具体关系如下图所示:
举例说明:
>>> class C:
... count=0 #类属性
... def __init__(self): # 魔法方法
... self.name = ‘haha’ # 公有实例属性
... self.__sex = ‘man’ # 私有实例属性
... def smile(self): # 公有方法 self指向实例对象
... pass
... def __jump(self): # 私有方法
... pass
... @classmethod
... def run(cls): # 类方法 cls 指向类对象
... pass
... @staticmethod
... def msg(): # 静态方法,可以没有参数
... pass
...
>>> a=C()
>>> b=C()
>>> c=C()
>>> print(a.count, b.count, c.count)
0 0 0
>>> c.count += 10
>>> print(a.count, b.count, c.count)
0 0 10
>>> C.count += 100
>>> print(a.count, b.count, c.count)
100 100 10
类属性:也称作静态属性,在构造方法外定义,类和实例公有,访问方法可以直接通过 . 取到,通过三个方法也均可以访问到。但是通过实例方法不能修改类属性,在实例方法中,若绑定了self则成为实例的属性,强行覆盖了类属性,此后也不能通过实例访问到改类属性了;如果不绑定就成为临时变量没有意义。
实例属性:实例对象独有,构造方法内添加或创建对象后利用 . 添加。若与类属性同名,覆盖之。
实例方法:传入参数self,可以通过实例调用,也可以通过类名调用,但要将明确的实例作为第一个参数传入。
类方法:@classmethod 且必须传入参数cls。
静态方法:@staticmethod,不用传入参数。
类方法和静态方法均可以修改类属性,二者都可以通过类名或实例调用。
类和对象的一切属性和方法均在以上类型,自动归类。
属性查询优先级:
① __getattribute__(), 无条件调用
② 数据描述符:由 ① 触发调用 (若人为的重载了该 __getattribute__() 方法,可能会调职无法调用描述符)
③ 实例对象的字典(若与描述符对象同名,会被覆盖哦)
④ 类的字典
⑤ 非数据描述符
⑥ 父类的字典
⑦ __getattr__() 方法
评论
本人不得不安利
博主真的谢谢你
楼主真的感谢分享