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