python中元類的介紹

來源:互聯網
上載者:User
元類MetaClass元類是可以讓你定義某些類是如何被建立的。從根本上說,賦予你如何建立類的控制權。元類也是一個類,是一個type類。 元類一般用於建立類。在執行類定義時,解譯器必須要知道這個類的正確的元類,如果此屬性沒有定義,它會向上尋找父類中的__metaclass__屬性。如果還沒發現,就尋找全域變數。

 對於傳統類來說,它們的元類是types.ClassType。 元類也有構造器,傳遞三個參數:類名,從基類繼承資料的元組,和類屬性字典下面我們來定義一個元類,要求寫類的時候必須給類提供一個__str__()方法,如果沒有提供__repr__()方法,則給你警告。 from warnings import warn
#元類需要繼承type類
class ReqStrSugRepr( type):
    def __init__(cls, name, bases, attrd):
    #建構函式需要傳遞的參數為類名,基類,類屬性字典
        super(ReqStrSugRepr, cls). __init__(name, bases, attrd)
        # 判斷__str__字串是否在類的屬性字典裡
        if '__str__' not in attrd:
            raise TypeError('Class requires overriding of __str__()')

        if '__repr__' not in attrd:
            warn('Class suggests overriding of __repr__()\n', stacklevel=3)

class Foo(object):
    #給類指定元類
    __metaclass__ = ReqStrSugRepr

    def foo(self):
        pass
#這一段代碼不用建立類來測試,直接運行一下就會報錯,可見元類的功力。  通過 為知筆記 發布

相關文章

聯繫我們

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