Python標準庫:內建函數classmethod(function),pythonclassmethod

來源:互聯網
上載者:User

Python標準庫:內建函數classmethod(function),pythonclassmethod

把類函數當作類的一個方法返回。類方法第一個參數是指明類,跟類中函數一樣,第一個參數是指明類執行個體。類方法修飾符採用下面的格式來使用:

class C:

@classmethod

def f(cls, arg1, arg2, ...):

...

從上面格式來看,@classmethod是函數在前置的一個修飾符,可以查看語言參考手冊。經過類方法修飾符的函數,可以直接通過類來調用,比如C.f()方式;也可以通執行個體的方式來調用,比如C().f()方式,但這個執行個體在這個函數裡被忽略掉了,沒起到什麼作用。如果類方法修飾符的函數,在繼承類時,衍生類別作為第一個參數傳遞給這個函數,也就是cls等於衍生類別。

 

類方法修飾符定義的函數與C++或JAVA裡靜態函數是不一樣的,如果要相似的功能,需要使用另外一個修飾符staticmethod。

classmethod設計的目的是什麼呢?其實與Python物件導向編程有關的,因為Python不支援多個的參數重載建構函式,比如在C++裡,建構函式可以根據參數個數不一樣,可以寫多個建構函式。Python為瞭解決這個問題,採用classmethod修飾符的方式,這樣定義出來的函數就可以在類對象執行個體化之前調用這些函數,就相當於多個建構函式,解決多個建構函式的代碼寫在類外面的問題。

與修飾符staticmethod的區別是類方法有一個型別參數,而靜態方法沒有。靜態方法主要用來解決全域函數的範圍的問題,而類方法是解決多個建構函式的問題,因此應用場境不一樣。

例子:

#classmethod()class C:    def __init__(self, i):        print('__init__: %d' % i)    @classmethod    def f(cls, name):        print(name)        return C(int(name))        a = C(1)b = C.f('10')c = C(2).f('100')        class D(C):    pass    D.f('20')

輸出結果如下:

__init__: 1

10

__init__: 10

__init__: 2

100

__init__: 100

20

__init__: 20

 

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.