python – 有没有理由选择__new__ over __init__定义元类?

我总是设置类似这样的元类:

class SomeMetaClass(type):
    def __new__(cls, name, bases, dict):
        #do stuff here

但是我刚刚遇到一个定义如下的元类:

class SomeMetaClass(type):
    def __init__(self, name, bases, dict):
        #do stuff here

有任何理由喜欢一个比另一个?

更新:记住,我要问一个元类中使用__new__和__init__。我已经明白了他们在另一个类之间的区别。但在元类中,我不能使用__new__来实现缓存,因为__new__只在类在元类中创建时调用。

如果要在创建类之前更改属性dict,或更改基本元组,则必须使用__new__。当__init__看到参数时,类对象已经存在。此外,如果要返回某个新建类型的类以外的其他类,则必须使用__new__。

另一方面,在__init__运行时,类确实存在。因此,你可以做一些事情,比如给刚刚创建的类引用一个成员对象。

编辑:改变的措辞,使它更清楚,“对象”,我的意思是类对象。

http://stackoverflow.com/questions/1840421/is-there-any-reason-to-choose-new-over-init-when-defining-a-metaclass

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 有没有理由选择__new__ over __init__定义元类?