python類方法和靜態方法詳解
類方法
需要用裝飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為參數
使用場景
1當方法中需要使用類對象(如訪問私有類屬性)時,定義類方法
2類方法一般和類屬性配合使用
# 需要用裝飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為參數 # 使用場景 # 1當方法中需要使用類對象(如訪問私有類屬性)時,定義類方法 # 2類方法一般和類屬性配合使用 class Dog(object): __tooth = 10 t=10 #修改私有屬性 @classmethod def getooth(cls, c): cls.__tooth = c return cls.__tooth #得到私有屬性 def get(self): return self.__tooth ww = Dog() cc=Dog() result1=ww.get() #10 result2 = ww.getooth(100) #100 result3=ww.get() #100 result4=cc.get() #100成功修改私有屬性 print(result1, result2,result3,result4 )
如果去掉@classmethod後,就無法修改私有類屬性,result4 變成瞭10
self,和cla隻是名詞,可以更換其它名字,@不可去掉
靜態方法
1特點
需要通過修飾器@staticmethod來修飾,靜態方法既不需要傳遞實例對象,也不需要傳遞類對象(形參沒有sslf/cls)
靜態方法也可以通過類對象和實例對象去訪問
2使用場景
當方法中既不需要使用實例對象(如實例屬性,實例方法),也不需要使用類對象(如類屬性、類方法、創建實例等時,定義靜態方法
取消不需要的參數傳遞,有利於減少不必要的內存占用和性能消耗
#1特點 #需要通過修飾器@staticmethod來修飾,靜態方法既不需要傳遞實例對象,也不需要傳遞類對象(形參沒有sslf/cls) #靜態方法也可以通過類對象和實例對象去訪問 #2使用場景 #當方法中既不需要使用實例對象(如實例屬性,實例方法),也不需要使用類對象(如類屬性、類方法、創建實例等時,定義靜態方法 #取消不需要的參數傳遞,有利於減少不必要的內存占用和性能消耗 class Dog(object): @staticmethod def static(): print("這是一個靜態方法") dog=Dog() dog.static() #這是一個靜態方法 Dog.static() #這是一個靜態方法
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Python學習之裝飾器與類的裝飾器詳解
- python中的classmethod與staticmethod
- Python類方法總結講解
- 基於Python 函數和方法的區別說明
- Python面向對象編程之類的概念