这两个东西看起来很相似, 但有什么区别呢 ?
__init__
不能返回实例, __new__
可以
return cls
class Hello(object): |
错误结果
__init__ invoked. |
__new__
会先被调用
代码
class Hello(object): |
结果
python ./class_hello.py |
这种结果是因为 __new__
是控制实例生成的过程, 而 __init__
是对已经生成的实例进行初始化的过程.__new__
方法像是一个类方法,而 __init__
像是个实例方法.
如果不是返回实例(比如这里返回 cls ), __init__
不会被调用
class Hello(object): |
结果
python ./class_hello.py |
参考
http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init