重写__new__和__init__在Python
可能重复:
Python's use of __new__ and __init__ ?重写__new__和__init__在Python
就我的理解,__init__
是从Java中的构造不同,因为__init__
仅初始化有一个对象已经被隐含地构建(因为__init__
在__new__
之后被调用)。但是,我需要定义的所有东西都使用了Java中的“构造函数”的后一个属性。程序员想要重写__new__
的情况是什么?
编辑:为了记录在案,我问一方面是因为我不知道会是什么优势/劣势在接受这个问题的答案使用一个单独的类方法来覆盖新对比:
__new__
实际发生在对象存在之前。这是这种类型的静态方法。使用__new__
是当你想控制新对象的创建时,例如一个单身。如果你的__new__
总是返回一个对象的同一个实例,那么它就是一个单例。你不能这样做,__init__
。
一般来说,在“Python作为圭多预期它是”你不应该使用__new__
超过每月一次:)
这很有道理。那么这个(接受的答案在下面)一个重写__new__也适合的情况? http://stackoverflow.com/questions/3571773/moving-beyond-factories-in-python – chimeracoder 2010-08-27 12:28:59
@thebackhand看起来像它 – abyx 2010-08-27 12:51:09
__new__
是创建新的对象实例,__init__
是对其进行初始化。
我想如果你设计一个不可变的类型,你必须在__new__
中初始化它,例如参见namedtuple
(也是Python's use of __new__ and __init__?)。
在我眼中不完全相同 – abyx 2010-08-27 12:50:53