我理解它的方式,__init__
与Java中的构造函数不同,因为__init__
仅初始化已隐式构造的对象(因为__init__
在{{__new__
之后被调用1}})。但是,我曾经需要定义的所有东西都使用了Java中“构造函数”的后一个属性。程序员想要覆盖__new__
?
编辑:对于记录,我问的部分原因是因为我想知道覆盖新与使用单独的类方法相比有什么优势/劣势?回答这个问题:
答案 0 :(得分:11)
__new__
实际上在对象存在之前发生。这是该类型的静态方法。 __new__
的使用是您想要控制新对象的创建,例如单身人士如果__new__
总是返回对象的同一个实例,那么它就是一个单例。你不能用__init__
。
一般来说,在“像Guido意图那样的python”中,你不应该每月多次使用__new__
:)
答案 1 :(得分:3)
__new__
用于创建新对象实例,__init__
用于初始化它。
我认为如果您设计了一个不可变类型,则必须在__new__
中对其进行初始化,例如namedtuple
(另请Python's use of __new__ and __init__?)。