python元類__metaclass__,元類__metaclass_

來源:互聯網
上載者:User

python元類__metaclass__,元類__metaclass_

<pre name="code" class="python">#python元類,類的建立過程#首先調用type.__new__#然後調用類的建構函式 class.__init__def toString(c):    s="";    if type(c)==tuple:        s="tuple:"        for i in c:            s+=str(i)            s+=","        return s    elif type(c) == dict:        s="dict:"        for k,v in c.items():            s+= "k=%s,v=%s" % (k,v)            s+=","        return s    elif type(c) == list:        s="list:"        for i in c:            s+=str(i)            s+","        return s    else:        return c        class ListMetaClass(type):    def __new__(cls, name, bases, attr):        #對於比較長的程式碼,可以使用\來分行        #有沒有感覺跟C++的define定義換行的感覺一樣(-><*><-)        print('cls=%s, name=%s,bases=%s,attrs=%s'\              % (toString(cls), toString(name), \                 toString(bases), toString(attr)))        attr['add']=lambda self,value:self.append(value)        return type.__new__(cls, name, bases, attr)    class MyList(list):    __metaclass__ = ListMetaClass        if __name__ == "__main__":    myList = MyList()    myList.add(100)    print(myList)        def listAdd(self,value):        self.append(value)            MyList2 = ListMetaClass("MyList2", (list,), dict(add=listAdd))    myList2=MyList2()    myList2.add(1000)    print(myList2)"""程式輸出:cls=<class '__main__.ListMetaClass'>, name=MyList,bases=tuple:<type 'list'>,,attrs=dict:k=__module__,v=__main__,k=__metaclass__,v=<class '__main__.ListMetaClass'>,[100]cls=<class '__main__.ListMetaClass'>, name=MyList2,bases=tuple:<type 'list'>,,attrs=dict:k=add,v=<function listAdd at 0x01AACBB0>,[1000]"""    



聯繫我們

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