python3中定义的__new__在哪里?

时间:2017-09-06 13:43:55

标签: python

在Python 2中:

>>> class A:
...  pass
... 
>>> A.__new__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute '__new__'
>>> class A(object):
...  pass
... 
>>> A.__new__
<built-in method __new__ of type object at 0x1062fe2a0>

结论:object包含__new__,子类继承该方法。

Python 3中的

>>> class A:
...  pass
... 
>>> A.__new__
<built-in method __new__ of type object at 0x100229940>

__new__是我们类中定义的方法,没有任何继承。这是如何运作的? __new__“来自哪里?”

2 个答案:

答案 0 :(得分:5)

在Python 3中,如果在不添加父类的情况下创建类,则它会自动从对象继承。你不能再像Python 2那样创建旧的样式类。

示例:

class A: # gets defaulted to class A(object):
    pass

答案 1 :(得分:1)

Python3中的所有类都是object的子类,您可以从mro中看到:

>>> class A: pass
... 
>>> A.__mro__
(<class '__main__.A'>, <class 'object'>)

class A(object)仍然在一些Python 3代码中完成,以保持与Python 2的向后兼容性。