類成員

類成員分為三大類:字段、方法、屬性

一、字段

  • 靜態(tài)字段 (屬于類)
  • 普通字段(屬于對象)

 

 字段

內存中分布:

  1. 靜態(tài)字段在內存中只保存一份
  2. 普通字段在每個對象中都要保存一份

靜態(tài)字段定義及應用:隨著這個程序的執(zhí)行產(chǎn)生,隨著程序的結束而消失,這樣和程序‘共存亡’的字段,我們就叫它靜態(tài)字段。它就像是一個全局變量,不屬于任何一個對象,我們可以直接使用類來調用,也可以在對象使用方法的時候使用它。它是對象共享的變量,存在類的內存里。

特殊:對象也可以訪問靜態(tài)字段。靜態(tài)字段在代碼加載時已經(jīng)創(chuàng)建。

遵循規(guī)則:普通字段只能對象訪問;靜態(tài)字段用類訪問。(萬不得已用對象訪問)

二、方法

  • 靜態(tài)方法:由對象調用;至少一個self參數(shù);執(zhí)行普通方法時,自動將調用該方法的對象賦值給self;
  • 類方法:由調用; 至少一個cls參數(shù);執(zhí)行類方法時,自動將調用該方法的復制給cls;
  • 普通方法:由調用;無默認參數(shù);

 

 方法

 

三、屬性

  • 屬性的基本使用
復制代碼
 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參數(shù)
  • 調用時,無需括號
               屬性: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 #自動執(zhí)行 @divpages .setter 修飾的 divpages 方法,并將  123 賦值給方法的參數(shù) 24 ret = p.divpages # 自動執(zhí)行 @property 修飾的 divpages方法,并獲取方法的返回值 25 del p.divpages # 自動執(zhí)行 @divpages.deleter 修飾的 divpages方法 26 print(ret)
復制代碼

 

屬性操作:不同屬性調用形式,觸發(fā)不同裝飾器的方法,見下圖。

 

 

  • 屬性另一種表達方式 
復制代碼
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對應函數(shù)f1并執(zhí)行,并將返回值 p.foo =113 #會找到fset對應函數(shù)f2并執(zhí)行 del p.foo # 會找到fdel并執(zhí)行f3
復制代碼

 

類成員修飾符

(困了,明天繼續(xù)更新。。。)