首页 > 代码库 > __init__ __new__区别

__init__ __new__区别

请运行代码:

class A:    def __init__(self):        print "A.__init"    def __new__(self):        print "A.__new"class B(object):    def __init__(self):        print "B.__init"        super(B, self).__init__()    def __new__(cls):        print "B.__new__"        return super(B,cls).__new__(cls)a = A()b = B()print(type(a))print(type(b))

运行结果

A.__init
B.__new__
B.__init
<type ‘instance‘>
<class ‘__main__.B‘>

请注意:  A无基类,B有基类并且__new__ 方法跟__init__两个方法有两点不同

1.self,cls参数不同,即 __new__为classmethod.

2.__new__有return。

这两个问题牵涉到概念New-style and classic classes。请参照https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes查看classic和new style clas,两者是如何出现的。

不管是new style或者classic都可以使用isinstance(obj, cls)做判断。

因为a虽然现实type ‘instance‘。但是查看a.__class__仍然可以看到a的类型。

 

__init__ __new__区别