在python中,靜态方法、類方法、屬性方法,剛接觸對于它們之間的差別确實讓人疑惑。
類方法(@classmethod)
是一個函數修飾符,表是該函數是一個類方法
類方法第一個參數是cls,而執行個體方法第一個參數是self(表示該類的一個執行個體)
類中普通函數至少要一個self參數,代表類對象執行個體
類方法至少需要一個cls參數,通過cls可以擷取到類本身的屬性方法等元資訊。當有個子類繼承時,傳入的是子類對象。
對于類方法兩種調用方式,類.func(),類執行個體.func()
靜态方法(@staticmethod)
靜态方法是不需要類(cls)和類執行個體(self)參數的。是以它的使用場景是:和類有關系的功能但在運作時又不需要執行個體和類參與的情況下需要用到靜态方法。比如封裝一個工具類,一般情況下都可以采用靜态方法形式。
靜态方法的優點:
代碼可讀性好:看到該标簽就知道這個方法并不需要依賴對象本身的狀态。
節省記憶體空間,既然是與類執行個體無關自然就不用建立類執行個體對象。
屬性方法(@property)
添加@property标簽,表示将一個普通函數變成一個類屬性,隻讀的
參見知乎上一篇問答: