众所周知,classPython 中创建 new 时有很多工作是在幕后完成的,例如设置__dict__、__class__、__metaclass__等属性。
我知道,当创建一个新类时,该type.__new__方法将被调用,并且type.__init__也会在call.__new__返回type. 所以我猜这两种方法可能负责一些工作,但我在文档中找不到关于它们实际功能的任何描述。我的问题是,这两种方法到底是做什么用的class?
编辑:
我知道元类是什么以及元类在创建实例的过程中大致做了什么type,但我想知道这两种方法如何配合来完成创建实例的工作type。也许@BrenBarn 是对的,这与实现相关。我只是想确认一下。例如,如果我__new__在自己的元类中重写该方法,并直接T返回,而不是像人们通常所做的那样在基类中调用,那么既不会被调用,也不会被调用,因为返回的对象不是 的实例。如果是这样,由于缺少 ,我会错过什么 ?而且,我可以期望这在各种实现中都是一致的行为吗?type(clsname, bases, dct)__new__typeT.__init__type.__init__T__init__
我想知道这两种方法如何配合来完成创建类型实例的工作
该type.__init__方法只负责检查是否有 1 或 3 个参数并且没有关键字参数。其 C 源代码位于type_init()中的函数中Objects/typeobject.c。
该type.__new__方法完成创建新类的所有其余工作。type_new_impl以下是in的步骤Objects/typeobject.c: