众所周知,在Python中创建新的class
时,有许多工作在幕后完成,例如设置__dict__
,__class__
,{{1}等属性等等。
我知道在创建新课程时,会调用__metaclass__
方法,并且type.__new__
也会在type.__init__
返回call.__new__
实例的情况下调用type
。所以我猜这两种方法可能会负责一些工作,但我在文档中找不到任何有关其实际功能的描述。我的问题是,这两种方法究竟做了什么来制作class
?
编辑:
我知道在创建type
实例的过程中,元类是什么以及大致元类的内容是什么,但我想知道这两个方法如何合作以实现创建type
实例的工作。也许@BrenBarn是正确的,这是与实现相关的。而我只想确保这一点。例如,如果我在自己的元类__new__
中重写T
方法,并直接返回type(clsname, bases, dct)
而不是在基类__new__
中调用type
作为人通常这样做,那么T.__init__
和type.__init__
都不会被调用,因为返回的对象不是T
的实例。如果是这样的话,由于__init__
的缺席,我期待错过什么?而且,我可以期望这是各种实现中的一致行为吗?
谢谢,