Python 例項方法 類方法 靜態方法區別總結

2021-10-08 15:21:44 字數 1285 閱讀 2747

二、示例

注意:不管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 例項方法就是類...