淺談python 類方法/靜態(tài)方法
1.類方法
類方法是從屬于'類對(duì)象'的方法。類對(duì)象可以通過裝飾器@classmethod來定義,具體格式如下:
@classmethoddef 類方法名(cls [, 形參列表]):方法體
要點(diǎn)如下:
@classmethod必須位于方法的上面一行 第一個(gè)參數(shù)cls(class的縮寫,和前面筆記介紹的self類似),必須要有,代指'類對(duì)象'本身。 調(diào)用類方法格式:類名.類方法名(參數(shù)列表)。參數(shù)列表中不需要也不能給cls參數(shù)進(jìn)行傳值,解釋器會(huì)自動(dòng)賦值。 類方法中可以訪問實(shí)例屬性和實(shí)例方法會(huì)導(dǎo)致錯(cuò)誤,因?yàn)橛蓄惒灰欢ㄓ袑?duì)象。 子類繼承父類方法時(shí),傳入cls是自身對(duì)象,而非父類對(duì)象。(后面的筆記會(huì)有介紹)代碼示例:
class Student: count = 0 # 類屬性 '''定義方法''' @classmethod def print_count(cls): '''cls參數(shù)代表類對(duì)象''' print(Student.count)'''調(diào)用類方法'''print('調(diào)用時(shí),不傳遞cls參數(shù)')Student.print_count()
運(yùn)行結(jié)果:
調(diào)用時(shí),不傳遞cls參數(shù)0
2.靜態(tài)方法
在python中,允許定義于”類對(duì)象“無關(guān)的方法,稱為'靜態(tài)方法'。'靜態(tài)方法'和在模塊中定義的普通方法沒有什么區(qū)別,只不過'靜態(tài)方法'放到了'類的名字變量空間',需要通過類調(diào)用。靜態(tài)方法通過裝飾器@staticmethod來定義,格式如下:
@staticmethoddef 靜態(tài)方法名([形參列表]):方法體
要點(diǎn)如下:
@staticmethod必須位于方法上面一行 調(diào)用靜態(tài)方法格式:類名.靜態(tài)方法名(參數(shù)列表) 靜態(tài)方法中訪問實(shí)例屬性和實(shí)例方法會(huì)導(dǎo)致錯(cuò)誤代碼示例:
class Student: count = 0 # 類屬性 @staticmethod def add(a, b): '''與類無關(guān)的靜態(tài)方法''' '''因?yàn)殪o態(tài)方法從屬于類,所以是可以操作類屬性和類方法''' print('{0}+{1}={2}'.format(a, b, a+b)) return a + b# 調(diào)用靜態(tài)方法Student.add(20, 30)
運(yùn)行結(jié)果:
20+30=50res=50
3.實(shí)例方法/類方法/靜態(tài)方法的區(qū)別
class MyClass: # 類屬性 class_attr = 0 def __init__(self, obj_attr): self.obj_attr = obj_attr def instance_method(self): return 'instance method called', self @classmethod def class_method(cls): return 'class method called', cls @staticmethod def static_method(): return 'static method called'print('調(diào)用實(shí)例方法')obj1 = MyClass('obj_attr1')print(obj1.instance_method())print('--' * 20)print('調(diào)用類方法')print(MyClass.class_method())print('--' * 20)print('調(diào)用靜態(tài)方法')print(MyClass.static_method())
運(yùn)行結(jié)果:
調(diào)用實(shí)例方法(’instance method called’, <__main__.MyClass object at 0x10ca93310>)----------------------------------------調(diào)用類方法(’class method called’, <class ’__main__.MyClass’>)----------------------------------------調(diào)用靜態(tài)方法static method called
注意: 以下討論的屬性、方法均指公開的類型,非私有的。
實(shí)例方法:
能讀取、修改實(shí)例屬性 能調(diào)用實(shí)例方法 能讀取、修改類屬性 能調(diào)用類方法 能調(diào)用類靜態(tài)方法 調(diào)用方式:對(duì)象名.實(shí)例方法名(參數(shù)列表),編譯器自動(dòng)傳遞self參數(shù)類方法:
不能讀取、修改實(shí)例屬性 不能用實(shí)例方法 能讀取、修改類屬性 能調(diào)用類方法 能調(diào)用類靜態(tài)方法 調(diào)用方式:類名.類方法名(參數(shù)列表),編譯器自動(dòng)傳遞cls參數(shù)靜態(tài)方法:
不能讀取、修改實(shí)例屬性 不能用實(shí)例方法 能讀取、修改類屬性 能調(diào)用類方法 能調(diào)用類靜態(tài)方法 調(diào)用方式: 類名.靜態(tài)方法名(參數(shù)列表),不需要cls參數(shù) 類方法和靜態(tài)方法,功能非常相近,可以相互替代, 但是從規(guī)范的角度來說,請(qǐng)按照實(shí)例方法操作對(duì)象,類方法操作類,靜態(tài)方法為和類無關(guān)的通用方法。以上就是淺談python 類方法/靜態(tài)方法的詳細(xì)內(nèi)容,更多關(guān)于類方法/靜態(tài)方法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP.NET MVC把數(shù)據(jù)庫中枚舉項(xiàng)的數(shù)字轉(zhuǎn)換成文字2. ASP.NET Core自定義中間件的方式詳解3. 《CSS3實(shí)戰(zhàn)》筆記--漸變?cè)O(shè)計(jì)(一)4. 用xslt+css讓RSS顯示的跟網(wǎng)頁一樣漂亮5. 教你JS更簡(jiǎn)單的獲取表單中數(shù)據(jù)(formdata)6. Ajax實(shí)現(xiàn)異步加載數(shù)據(jù)7. 測(cè)試模式 - XSL教程 - 58. html5手機(jī)觸屏touch事件介紹9. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫特效10. 讓chatgpt將html中的圖片轉(zhuǎn)為base64方法示例
