在创建一个新的`type`实例(即class)时,类`type .__ init__`和`type .__ new__`会做什么?

时间:2016-05-24 04:34:33

标签: python

众所周知,在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__的缺席,我期待错过什么?而且,我可以期望这是各种实现中的一致行为吗?

谢谢,

黄丽福

0 个答案:

没有答案