在Python中覆盖__new__和__init__

Overriding __new__ and __init__ in Python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python's use of __new__ and __init__ ?

按照我理解的方式,EDCOX1×0是不同于Java中的构造函数的,因为EDCOX1(0)只初始化已经被隐式构造的对象(因为EDOCX1 0)在EDCOX1(3)之后被调用。然而,我所需要定义的所有东西都使用了Java中的"构造函数"的后一个属性。如果程序员想要覆盖__new__,会发生什么情况?

编辑:对于记录,我问的部分原因是我想知道在接受的这个问题的答案中,使用一个单独的类方法来覆盖新的与新的相比,有什么优势/劣势:

超越Python工厂


__new__实际上发生在对象存在之前。这是类型的静态方法。当您想要控制新对象的创建时,例如单例对象,使用__new__。如果您的__new__总是返回一个对象的同一个实例,那么它是一个单例。你不能用__init__来做这个。

一般来说,在"python as guido expected it to be"中,您每月不应超过一次使用__new__:。


__new__用于新建对象实例,__init__用于初始化对象实例。

我认为,如果你设计了一个不变的类型,你必须在__new__中初始化它,例如,参见namedtuple(还有python使用的"new"和"in it")。.