python中靜態方法、類方法、屬性方法區別
阿新 • • 發佈:2018-09-22
ref self 使用 lan com 通過 場景 UNC cme
在python中,靜態方法、類方法、屬性方法,剛接觸對於它們之間的區別確實讓人疑惑。
類方法(@classmethod)
- 是一個函數修飾符,表是該函數是一個類方法
- 類方法第一個參數是cls,而實例方法第一個參數是self(表示該類的一個實例)
- 類中普通函數至少要一個self參數,代表類對象實例
- 類方法至少需要一個cls參數,通過cls可以獲取到類本身的屬性方法等元信息。當有個子類繼承時,傳入的是子類對象。
- 對於類方法兩種調用方式,類.func(),類實例.func()
靜態方法(@staticmethod)
靜態方法是不需要類(cls)和類實例(self)參數的。所以它的使用場景是:和類有關系的功能但在運行時又不需要實例和類參與的情況下需要用到靜態方法。比如封裝一個工具類,一般情況下都可以采用靜態方法形式。
靜態方法的優點:
- 代碼可讀性好:看到該標簽就知道這個方法並不需要依賴對象本身的狀態。
- 節省內存空間,既然是與類實例無關自然就不用創建類實例對象。
屬性方法(@property)
添加@property標簽,表示將一個普通函數變成一個類屬性,只讀的
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000
參見知乎上一篇問答:
https://www.zhihu.com/question/20021164
python中靜態方法、類方法、屬性方法區別