欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解python中@classmethod和@staticmethod方法

 更新時(shí)間:2022年10月14日 10:12:28   作者:shaoyishi  
在python類當(dāng)中,經(jīng)常會(huì)遇到@classmethod和@staticmethod這兩個(gè)裝飾器,那么到底它們的區(qū)別和作用是啥子呢?本文結(jié)合場(chǎng)景分析給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧

在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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論