二、示例
注意:不管self引數,還是cls引數,都是一種約定俗成的用法,其實是可以使用其他的引數名代替。但是不建議使用其他引數名,畢竟**不是只是寫給自己看的。
class a(object):
def m1(self, n):
print("self:", self)
@classmethod
def m2(cls, n):
print("cls:", cls)
@staticmethod
def m3(n):
pass
a = a()
a.m1(1) # self: <__main__.a object at>
a.m2(1) # cls: a.m3(1)
類中一共定義了3個方法,m1 是例項方法,第乙個引數必須是 self(約定俗成的)。m2 是類方法,第乙個引數必須是cls(同樣是約定俗成),m3 是靜態方法,引數根據業務需求定,可有可無。
當程式執行時,大概發生了這麼幾件事:
嚴格意義上來說,左邊的都是變數名,是物件的引用,右邊才是真正的對像,為了描述方便,我直接把 a 稱為物件,你應該明白我說物件其實是它所引用右邊的那個真正的物件。
class a(object):
# 屬性預設為類屬性(可以給直接被類本身呼叫)
num = "類屬性"
# 例項化方法(必須例項化類之後才能被呼叫)
def func1(self): # self : 表示例項化類後的位址id
print("func1")
print(self)
# 類方法(不需要例項化類就可以被類本身呼叫)
@classmethod
def func2(cls): # cls : 表示沒用被例項化的類本身
print("func2")
print(cls)
print(cls.num)
cls().func1()
# 不傳遞傳遞預設self引數的方法(該方法也是可以直接被類呼叫的,但是這樣做不標準)
@staticmethod
def func3():
print("func3")
print(a.num) # 屬性是可以直接用類本身呼叫的
a.func2()
a.func3()
參考: python例項方法 靜態方法 類方法
class foo object deftest self 定義了例項方法 print object classmethod deftest2 clss 定義了類方法 print class staticmethod deftest3 定義了靜態方法 print static 1 例項方法就是類的例...
Python類方法 靜態方法 例項方法
靜態方法是指類中無需例項參與即可呼叫的方法 不需要self引數 在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。通常情況下,靜態方法使用 staticmethod裝飾器來宣告。class classa object staticmethod def func a print hel...
Python例項方法,類方法,靜態方法
class foo object def test self 定義了例項方法 print object classmethod def test2 cls 定義了類方法 print class staticmethod def test3 定義了靜態方法 print static 1 例項方法就是類...