類成員
類成員分為三大類:字段、方法、屬性
一、字段
- 靜態(tài)字段 (屬于類)
- 普通字段(屬于對象)
字段
內存中分布:
- 靜態(tài)字段在內存中只保存一份
- 普通字段在每個對象中都要保存一份
靜態(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ù)更新。。。)