詳解python中@classmethod和@staticmethod方法
在python類當(dāng)中,經(jīng)常會(huì)遇到@classmethod和@staticmethod這兩個(gè)裝飾器,那么到底它們的區(qū)別和作用是啥子呢?具體來(lái)看下。
- @classmethod :默認(rèn)有一個(gè)cls參數(shù),用類或?qū)ο蠖伎梢哉{(diào)用。
- @staticmethod:靜態(tài)方法,無(wú)默認(rèn)參數(shù),用類和對(duì)象都可以調(diào)用。
1.@staticmethod:
我們看下代碼:
class A: def f1(x): print(x) A.f1(2) # 2 類.函數(shù)
創(chuàng)建一個(gè)類,通過(guò)類調(diào)用函數(shù)。
class A: @staticmethod def f1(x): print(x) A.f1(2) # 2 類.靜態(tài)方法 A().f1(2) # 2 對(duì)象.靜態(tài)方法 這種情況下是可以執(zhí)行的,如果上述f1沒有被staticmethod裝飾那么就會(huì)報(bào)錯(cuò)?。。?/pre>
創(chuàng)建一個(gè)類,通過(guò)類調(diào)用函數(shù)。同時(shí),因?yàn)樵摲椒ū籹taticmethod裝飾器裝飾了,那么通過(guò)對(duì)象.方法也是可以調(diào)用的。
所以在類中,通過(guò)@staticmethod裝飾的函數(shù),可以直接被類調(diào)用,也可以被實(shí)例化后的對(duì)象調(diào)用?。?!
同時(shí),發(fā)現(xiàn)@staticmethod裝飾的函數(shù)根本不需要傳遞self這個(gè)參數(shù)。因?yàn)楸籃staticmethod裝飾的函數(shù)是直接綁定在類上而不是對(duì)象上。
2.@classmethod:
class A: @classmethod def f1(cls,x): print(x) A.f1(2) # 2 類.方法 A().f1(2) # 2 對(duì)象.方法
創(chuàng)建一個(gè)類,通過(guò)類調(diào)用函數(shù)。同時(shí),因?yàn)樵摲椒ū籧lassmethod裝飾器裝飾了,那么通過(guò)對(duì)象.方法也是可以調(diào)用的。但注意,在被裝飾方法中,必須傳遞cls參數(shù)?。?!
class B: name = 'bruce' age = 16 @classmethod def f1(cls,x): print(x) print(cls.age) print(cls.name) B().f1(1) # 1 # 16 # bruce
上述中,說(shuō)明被classmethod裝飾后的方法,通過(guò)cls參數(shù),在該方法中,可以調(diào)用該類的屬性。
class C: @classmethod def f1(cls,x): print(x) cls().f2() def f2(self): print('hello world') C.f1(1) 或者 C().f1(1)# 1<br># hello world
上述中,說(shuō)明被classmethod裝飾后的方法,通過(guò)cls參數(shù),在該方法中,可以調(diào)用該類的其他方法。
所以在類中,通過(guò)@classmethod裝飾的函數(shù),首先在方法中必須傳遞第一個(gè)參數(shù)cls, 該函數(shù)可以被類直接調(diào)用,也可以被對(duì)象調(diào)用?。。?/p>
同時(shí),因?yàn)閭鬟f了一個(gè)cls,所以可以調(diào)用類中的其他屬性和方法。
到此這篇關(guān)于詳解python中@classmethod和@staticmethod方法的文章就介紹到這了,更多相關(guān)python中@classmethod和@staticmethod內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置裝飾器@staticmethod和@classmethod
- Python中類方法@classmethod和靜態(tài)方法@staticmethod解析
- Python?class類@staticmethod及@classmethod區(qū)別淺析
- 詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼
- Python 類方法和實(shí)例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- Python中@classmethod和@staticmethod的區(qū)別
相關(guān)文章
python實(shí)現(xiàn)zencart產(chǎn)品數(shù)據(jù)導(dǎo)入到magento(python導(dǎo)入數(shù)據(jù))
這篇文章主要介紹了python實(shí)現(xiàn)zencart產(chǎn)品數(shù)據(jù)導(dǎo)入到magento(python導(dǎo)入數(shù)據(jù)),需要的朋友可以參考下2014-04-04python?中?關(guān)于reverse()?和?reversed()的用法詳解
這篇文章主要介紹了python?中?關(guān)于reverse()?和?reversed()的用法介紹,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01django連接Mysql中已有數(shù)據(jù)庫(kù)的方法詳解
眾所周知Django較為適合原生開發(fā),即通過(guò)該框架搭建一個(gè)全新的項(xiàng)目,通過(guò)在修改models.py來(lái)創(chuàng)建新的數(shù)據(jù)庫(kù)表,下面這篇文章主要給大家介紹了關(guān)于django連接Mysql中已有數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2022-05-05基于Python實(shí)現(xiàn)下載網(wǎng)易音樂代碼實(shí)例
這篇文章主要介紹了基于Python實(shí)現(xiàn)下載網(wǎng)易音樂代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08python3操作注冊(cè)表的方法(Url protocol)
使用python操作注冊(cè)表的方法最近學(xué)習(xí)了一下,現(xiàn)在做一下筆記,由于對(duì)Python語(yǔ)言的使用還不是很熟練,所以寫不出高大上的結(jié)構(gòu)2020-02-02python pandas利用fillna方法實(shí)現(xiàn)部分自動(dòng)填充功能
這篇文章主要介紹了python pandas通過(guò)fillna方法實(shí)現(xiàn)部分自動(dòng)填充功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03查找python項(xiàng)目依賴并生成requirements.txt的方法
今天小編就為大家分享一篇查找python項(xiàng)目依賴并生成requirements.txt的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07