1. 程式人生 > 實用技巧 >python類中cls,@classmethod,@staticmethod詳解

python類中cls,@classmethod,@staticmethod詳解

@classmethod,@staticmethod是python內建的兩個修飾符方法。
@classmethod修飾符對應的函式不需要例項化,不需要 self 引數,但第一個引數需要是表示自身類的 cls 引數,可以來呼叫類的屬性,類的方法,例項化物件等。

class A(object):

    # 屬性預設為類屬性(可以給直接被類本身呼叫)
    num = "test"

    # 例項化方法(必須例項化類之後才能被呼叫)
    def func1(self): # self : 表示例項化類後的地址id
        print("func1")
        print(self)

    # 類方法(不需要例項化類就可以被類本身呼叫)
    @classmethod
    def func2(cls):  # cls : 表示沒用被例項化的類本身
        print("func2")
        print(cls)
        print(cls.num)
        cls().func1()

    # 不傳遞傳遞預設self引數的方法(該方法也是可以直接被類呼叫的,但是這樣做不標準)
    def func3():
        print("func3")
        print(A.num) # 屬性是可以直接用類本身呼叫的
    
# A.func1() 這樣呼叫是會報錯:因為func1()呼叫時需要預設傳遞例項化類後的地址id引數,如果不例項化類是無法呼叫的
A.func2()
A.func3()

@staticmethod 返回函式的靜態方法。該方法不強制要求傳遞引數。

class C(object):
    @staticmethod
    def f():
        print('runoob');
 
C.f()           # 靜態方法無需例項化
cobj = C()
cobj.f()        # 也可以例項化後呼叫