Python 靜態方法和類方法例項分析
阿新 • • 發佈:2020-01-09
本文例項講述了Python 靜態方法和類方法。分享給大家供大家參考,具體如下:
1. 類屬性、例項屬性
它們在定義和使用中有所區別,而最本質的區別是記憶體中儲存的位置不同,
例項屬性屬於物件
類屬性屬於類
class Province(object): # 類屬性 country = '中國' def __init__(self,name): # 例項屬性 self.name = name # 建立一個例項物件 obj = Province('山東省') # 直接訪問例項屬性 print(obj.name) # 直接訪問類屬性 Province.country
由上述程式碼可以看出【例項屬性需要通過物件來訪問】【類屬性通過類訪問】,在使用上可以看出例項屬性和類屬性的歸屬是不同的。
其在內容的儲存方式類似如下圖:
由上圖看出:
類屬性在記憶體中只儲存一份
例項屬性在每個物件中都要儲存一份
應用場景:
通過類建立例項物件時,如果每個物件需要具有相同名字的屬性,那麼就使用類屬性,用一份既可
2. 例項方法、靜態方法和類方法
方法包括:例項方法、靜態方法和類方法,三種方法在記憶體中都歸屬於類,區別在於呼叫方式不同。
例項方法:由物件呼叫;至少一個self引數;執行例項方法時,自動將呼叫該方法的物件賦值給self;
類方法:由類呼叫; 至少一個cls引數;執行類方法時,自動將呼叫該方法的類賦值給cls;
靜態方法:由類呼叫;無預設引數;
class Foo(object): def __init__(self,name): self.name = name def ord_func(self): """ 定義例項方法,至少有一個self引數 """ # print(self.name) print('例項方法') @classmethod def class_func(cls): """ 定義類方法,至少有一個cls引數 """ print('類方法') @staticmethod def static_func(): """ 定義靜態方法 ,無預設引數""" print('靜態方法') f = Foo("中國") # 呼叫例項方法 f.ord_func() # 呼叫類方法 Foo.class_func() # 呼叫靜態方法 Foo.static_func()
對比
相同點:對於所有的方法而言,均屬於類,所以 在記憶體中也只儲存一份
不同點:方法呼叫者不同、呼叫方法時自動傳入的引數不同。
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》
希望本文所述對大家Python程式設計有所幫助。