定義類的方法,相信你會說,不就是在class語句下使用def () 就是定義類的方法了嘛,是的,這是定義的方法的一種,而且是最普通的方式 首先,我們已經知道有兩種方式: 1.普通方法: 1)與類無關的方法 2)與類相關的方法: 能夠被類直接調用的方法,而實例化因為沒有self綁定,會把自身作為參數傳 ...
定義類的方法,相信你會說,不就是在class語句下使用def () 就是定義類的方法了嘛,是的,這是定義的方法的一種,而且是最普通的方式
首先,我們已經知道有兩種方式:
1.普通方法:
1)與類無關的方法
2)與類相關的方法:
能夠被類直接調用的方法,而實例化因為沒有self綁定,會把自身作為參數傳參而報錯
2.實例方法:
像這種必須實例化才能調用的方法,就是實例方法
其實還有兩種方法,其實在上一篇博文里有伏筆的,我打開的@property的官方文檔截圖裡就有的——@staticmethod,@classmethod,這兩種方式也可以定義方法,那分別代表啥意思呢?接著看
@staticmethod
1.什麼是@staticmethod
看英文單詞,翻譯過來就是靜態方法,靜態方法是一種普通函數,位於類定義的命名空間中,不會對任何實例類型進行操作。靜態方法和在普通的非class的method作用是一樣的,只不過是命名空間是在類裡面。一般使用場景就是和類相關的操作,但是又不會依賴和改變類、實例的狀態
2.怎麼使用:
python為我們內置了函數staticmethod來把類中的函數定義成靜態方法
3.作用:
- 代碼易讀性.靜態方法並不需要self參數
- 節約記憶體.不用每個實例都實例化方法.
- 在類內部控制靜態方法.不然的話換一種實現方法,把函數放在在類外部......
@classmethod
1.什麼是@classmethod
同樣的,翻譯英文就是類方法,就是可以被類直接使用的方法,不需要實例化給實例化對象使用的方法
2.怎麼使用:
1):
看到了嗎?類對象A,也可以直接使用class_test方法,而不需要實例化給對象再使用。是的,classmethod裝飾的方法類也可以直接用,並且其內第一個參數是 cls,即代表類自身,如同self一樣
看了上面的例子,相信你應該有所瞭解了。
2):既然使用@classmethod之後類就可以直接使用方法,我們知道在python中,一切皆對象,所以可以將類調用的方法賦值給另一個對象,這就是構造:
當然我這裡只是作為列印使用,你可以給定你希望的結果,並賦值給其他對象。
3):@classmethod也可以被子類繼承
3.作用:
@classmethod為python提供額外的構造器,主要用途是作為構造函數。Python只有一個構造函數__new__,如果想要多種構造函數就很不方便。只能在new裡面寫一堆代碼。
有classmethod之後就可以用classmethod來寫不同的構造函數,並且可以類與類之間進行交互等等。
@classmethod和@staticmethod的區別
雖然@classmethod和@staticmethod非常的相似,但是兩者在具體的使用上還是有著細微的差別:classmethod必須使用類對象cls作為第一個參數,而staticmethod則可以不傳遞任何參數