理解python的元類

來源:互聯網
上載者:User

標籤:__new__   base   通過   引用   value   __init__   文章   ##   object   

看了一篇文檔,借鑒一下!寫下自己對python元類的理解,歡迎各位大神給出意見。

我的理解就是

type用來建立元類,元類用來建立類,類用來建立執行個體

這樣一想,是不是可以認為元類建立類的過程等同於類建立執行個體,類建立不同的執行個體,雖然每個執行個體都有類似的屬性,方法,但具體都是不一樣的!

class Fruits():    def __init__(self,name,color):        self.name=name        self.color=color    def __new__(cls,name,color):        return object.__new__(cls)apple=Fruits(‘apple‘,‘red‘)print(apple.name)print(apple.color)banana=Fruits(‘banana‘,‘yellow‘)print(banana.name)print(banana.color)

類的兩個執行個體apple,banana都有同樣的屬性name,age,但是各自的值確實不同的,都屬於水果類,但卻是不同的水果。。

 

再來看元類定製類的過程,直接引用大神的代碼吧

元類建立類的過程中也可以認為是每個類都有相同的地方(比如都是一個元類建立,都有共同的Fu類),也有各自不同的地方(每個類的類名不同,實現的方法也不同)

# 猜想,類中的new方法是用來建立執行個體的# 元類的new方法是用來建立類的?# 道生一:傳入typeclass SayMetaClass(type):    # 傳入三大永恒命題:類名稱、父類、屬性    def __new__(cls, name, bases, attrs):        print("test, new is running!")        # 創造“天賦”        attrs[‘say_‘ + name] = lambda self, value, saying=name: print(saying + ‘,‘ + value + ‘!‘)        # 傳承三大永恒命題:類名稱、父類、屬性        return type.__new__(cls, name, bases, attrs)#########Hello類# 一生二:建立類class Hello(object, metaclass=SayMetaClass):    pass# 二生三:建立實列hello = Hello()# 三生萬物:調用執行個體方法hello.say_Hello(‘world!‘)#########Nihao類# 一生二:建立類class Nihao(object, metaclass=SayMetaClass):    pass# 二生三:建立實列nihao = Nihao()# 三生萬物:調用執行個體方法nihao.say_Nihao(‘world!‘)

 

這就是一個元類建立類的過程,通過class Hello(object, metaclass=SayMetaClass):  建立類,在建立的時候調用了元類的__new__方法(這裡似乎發現一個通性:類的new方法用來建立執行個體,元類的new方法用來建立類)通過這個元類的new方法建立了類Hello跟Nihao,Hello擁有私人定製的say_**方法,是不是跟類的執行個體有點類似,這樣理解起來感覺簡單多了。。

 

文章連結:http://python.jobbole.com/88795/

 

理解python的元類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.