Python類方法 靜態方法 例項方法

2021-09-14 05:38:33 字數 2538 閱讀 4792

靜態方法是指類中無需例項參與即可呼叫的方法(不需要self引數),在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。

通常情況下,靜態方法使用@staticmethod裝飾器來宣告。

class classa(object):

@staticmethod

def func_a():

print('hello python')

if __name__ == '__main__':

classa.func_a()

# 也可以使用例項呼叫,但是不會將例項作為引數傳入靜態方法

ca = classa()

ca.func_a()

這裡需要注意的是,在python 2 中,如果乙個類的方法不需要self引數,必須宣告為靜態方法,即加上@staticmethod裝飾器,從而不帶例項呼叫它。

而在python 3中,如果乙個類的方法不需要self引數,不再需要宣告為靜態方法,但是這樣的話只能通過類去呼叫這個方法,如果使用例項呼叫這個方法會引發異常

class classa(object):

def func_a():

print('hello python')

if __name__ == '__main__':

classa.func_a()

# 以下使用例項呼叫會引發異常

ca = classa()

ca.func_a()

異常資訊:

func_a() takes 0 positional arguments but 1 was given
類方法在python中使用比較少,類方法傳入的第乙個引數為cls,是類本身。並且,類方法可以通過類直接呼叫,或通過例項直接呼叫。但無論哪種呼叫方式,最左側傳入的引數一定是類本身。

通常情況下,類方法使用@classmethod裝飾器來宣告

class classa(object):

@classmethod

def func_a(cls):

print(type(cls), cls)

if __name__ == '__main__':

classa.func_a()

ca = classa()

ca.func_a()

從執行結果可以看出,無論是類呼叫還是例項呼叫,類方法都能正常工作。且通過列印cls,可以看出cls傳入的都是類例項本身。

這裡需要注意,如果存在類的繼承,那類方法獲取的類是類樹上最底層的類。

class basea(object):

@classmethod

def func_a(cls):

print(type(cls), cls)

class baseb(object):

pass

class classa(basea, baseb):

pass

if __name__ == '__main__':

classa.func_a()

ca = classa()

ca.func_a()

**中classa繼承自basea、baseb,在呼叫類方法時,雖然類方法是從basea繼承而來,但是傳入func_a的cls函式實際上是classa,也就是最底層(最具體)的類。

執行結果:

所以,在某些時候,需要明確呼叫類屬性時,不要使用類方法傳入的cls引數,因為它傳入的是類樹中最底層的類,不一定符合設計初衷。

可以直接通過類名訪問類屬性。

class basea(object):

@classmethod

def func_a(cls):

# 直接使用類名,而不使用cls

print(basea)

print(type(cls), cls)

class baseb(object):

pass

class classa(basea, baseb):

pass

if __name__ == '__main__':

classa.func_a()

例項方法,除靜態方法與類方法外,類的其他方法都屬於例項方法。

例項方法需要將類例項化後呼叫,如果使用類直接呼叫例項方法,需要顯式地將例項作為引數傳入。

最左側傳入的引數self,是例項本身。

class classa(object):

def func_a(self):

print('hello python')

if __name__ == '__main__':

# 使用例項呼叫例項方法

ca = classa()

ca.func_a()

# 如果使用類直接呼叫例項方法,需要顯式地將例項作為引數傳入

classa.func_a(ca)

python例項方法 靜態方法 類方法

class foo object deftest self 定義了例項方法 print object classmethod deftest2 clss 定義了類方法 print class staticmethod deftest3 定義了靜態方法 print static 1 例項方法就是類的例...

Python例項方法,類方法,靜態方法

class foo object def test self 定義了例項方法 print object classmethod def test2 cls 定義了類方法 print class staticmethod def test3 定義了靜態方法 print static 1 例項方法就是類...

python例項方法 類方法和靜態方法

class testclassmethod object method method hoho def init self self.name leon def test1 self print test1 print self classmethod def test2 cls print cls...