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]"""