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

