类成员

类成员分为三大类:字段、方法、属性

一、字段

  • 静态字段 (属于类)
  • 普通字段(属于对象)

 

 字段

内存中分布:

  1. 静态字段在内存中只保存一份
  2. 普通字段在每个对象中都要保存一份

静态字段定义及应用:随着这个程序的执行产生,随着程序的结束而消失,这样和程序‘共存亡’的字段,我们就叫它静态字段。它就像是一个全局变量,不属于任何一个对象,我们可以直接使用类来调用,也可以在对象使用方法的时候使用它。它是对象共享的变量,存在类的内存里。

特殊:对象也可以访问静态字段。静态字段在代码加载时已经创建。

遵循规则:普通字段只能对象访问;静态字段用类访问。(万不得已用对象访问)

二、方法

  • 静态方法:由对象调用;至少一个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
复制代码

 

类成员修饰符

(困了,明天继续更新。。。)