日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

詳解python中@classmethod和@staticmethod方法_python

作者:shaoyishi ? 更新時間: 2022-11-24 編程語言

在python類當中,經常會遇到@classmethod和@staticmethod這兩個裝飾器,那么到底它們的區別和作用是啥子呢?具體來看下。

  • @classmethod :默認有一個cls參數,用類或對象都可以調用。
  • @staticmethod:靜態方法,無默認參數,用類和對象都可以調用。

1.@staticmethod:

我們看下代碼:

class A:
    def f1(x):
        print(x)
         
A.f1(2)  # 2  類.函數

創建一個類,通過類調用函數。

class A:
    @staticmethod
    def f1(x):
        print(x)
         
A.f1(2)  # 2  類.靜態方法
A().f1(2)  # 2 對象.靜態方法  這種情況下是可以執行的,如果上述f1沒有被staticmethod裝飾那么就會報錯?。?!

創建一個類,通過類調用函數。同時,因為該方法被staticmethod裝飾器裝飾了,那么通過對象.方法也是可以調用的。

所以在類中,通過@staticmethod裝飾的函數,可以直接被類調用,也可以被實例化后的對象調用!!!

同時,發現@staticmethod裝飾的函數根本不需要傳遞self這個參數。因為被@staticmethod裝飾的函數是直接綁定在類上而不是對象上。

2.@classmethod:

class A:
    @classmethod
    def f1(cls,x):
        print(x)
         
A.f1(2)  # 2  類.方法
A().f1(2) # 2  對象.方法

創建一個類,通過類調用函數。同時,因為該方法被classmethod裝飾器裝飾了,那么通過對象.方法也是可以調用的。但注意,在被裝飾方法中,必須傳遞cls參數!??!

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參數,在該方法中,可以調用該類的屬性。

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參數,在該方法中,可以調用該類的其他方法。

所以在類中,通過@classmethod裝飾的函數,首先在方法中必須傳遞第一個參數cls, 該函數可以被類直接調用,也可以被對象調用?。。?/p>

同時,因為傳遞了一個cls,所以可以調用類中的其他屬性和方法。

原文鏈接:https://www.cnblogs.com/shaoyishi/p/16790680.html

欄目分類
最近更新