1:__new__:它是创建对象时调用,会返回当前对象的一个实例;
__init__:它是创建对象后调用,对当前对象的一些实例初始化,无返回值
代码示例:
>>> class Data(object): def __init__(cls): cls.x = 2 print "init" return cls ###在init中不可用 >>> data = Data() init Traceback (most recent call last): File "<pyshell#100>", line 1, in <module> data = Data() TypeError: __init__() should return None, not 'Data' >>> class Data(object): def __new__(cls): cls.x = 3 print "new" return cls >>> data = Data() new >>> data.x 3
由上可见,__new__方法会返回所构造的对象,__init__则不会,__init__无返回值
2:再类中,若__new__和__init__同时存在时,先调用__new__
代码示例:
>>> class Data(object): def __new__(self): print "new" def __init__(self): print "init" >>> data = Data() new
3:If __new__() returns an instance of cls, then the new instance’s __init__() method will be invoked like __init__(self[, ...]), where self is the new instance and the remaining arguments are the same as were passed to __new__().
如果__new__返回一个对象的实例,会隐式调用__init__
If __new__() does not return an instance of cls, then the new instance’s __init__() method will not be invoked.
如果__new__不返回一个对象的实例,__init__不会被调用
代码示例:
>>> class A(object): def __new__(Class): object = super(A,Class).__new__(Class) print "in new" return object ##返回对象的实例 def __init__(self): print "in init" >>> A() in new in init <__main__.A object at 0x0215CD70> >>> class B(object): def __new__(cls): print "in new" return cls def __init__(self): print "in init" >>> b=B() in new
每天多一点提高,给自己一些激励,开心生活,用编码来丰富我的生活,加油!
↖(^ω^)↗