类成员
类成员分为三大类:字段、方法、属性
一、字段
- 静态字段 (属于类)
- 普通字段(属于对象)
字段
内存中分布:
- 静态字段在内存中只保存一份
- 普通字段在每个对象中都要保存一份
静态字段定义及应用:随着这个程序的执行产生,随着程序的结束而消失,这样和程序‘共存亡’的字段,我们就叫它静态字段。它就像是一个全局变量,不属于任何一个对象,我们可以直接使用类来调用,也可以在对象使用方法的时候使用它。它是对象共享的变量,存在类的内存里。
特殊:对象也可以访问静态字段。静态字段在代码加载时已经创建。
遵循规则:普通字段只能对象访问;静态字段用类访问。(万不得已用对象访问)
二、方法
- 静态方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
- 类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
- 普通方法:由类调用;无默认参数;
方法
三、属性
- 属性的基本使用
1 class Page: 2 3 def __init__(self,all_counts): 4 self.all_counts = all_counts 5 6 # 属性: 分页 7 @property 8 def divpages(self): 9 a,b = divmod(self.all_counts,10) 10 if b == 0: 11 return a 12 else: 13 return a+1 14 15 16 p = Page(101) 17 ret = p.divpages# 调用属性 直接返回 18 print(ret)
属性的定义和调用:
- 定义时,在普通方法的基础上添加 @property 装饰器;
- 定义时,属性仅有一个self参数
-
调用时,无需括号
属性:p.divpages
Python的属性的功能是:属性内部进行一系列的逻辑计算,最终将计算结果返回
注意:属性存在意义是:访问属性时可以制造出和访问字段完全相同的假象
属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能。
1 class Page: 2 3 def __init__(self,all_counts): 4 self.all_counts = all_counts 5 6 # 属性: 分页 7 @property 8 def divpages(self): 9 a,b = divmod(self.all_counts,10) 10 if b == 0: 11 return a 12 else: 13 return a+1 14 # 设置属性:支持赋值操作 15 @divpages.setter 16 def divpages(self,value): 17 self.all_counts = value 18 # 删除 19 @divpages.deleter 20 def divpages(self): 21 print("del property") 22 p = Page(101) 23 p.divpages = 111 #自动执行 @divpages .setter 修饰的 divpages 方法,并将 123 赋值给方法的参数 24 ret = p.divpages # 自动执行 @property 修饰的 divpages方法,并获取方法的返回值 25 del p.divpages # 自动执行 @divpages.deleter 修饰的 divpages方法 26 print(ret)
属性操作:不同属性调用形式,触发不同装饰器的方法,见下图。
- 属性另一种表达方式
class Page: def __init__(self,count): self.count = count def f1(self): return 123 def f2(self): print("fset:赋值") def f3(self): print("fdel:删除") foo = property(fget=f1,fset=f2,fdel=f3) p = Page(100) ret = p.foo # 自动回找到fool,会找到fget对应函数f1并执行,并将返回值 p.foo =113 #会找到fset对应函数f2并执行 del p.foo # 会找到fdel并执行f3
类成员修饰符
(困了,明天继续更新。。。)