python類中cls,@classmethod,@staticmethod詳解
阿新 • • 發佈:2020-12-28
@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() # 也可以例項化後呼叫