在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__
,子类继承该方法。
:
>>> class A:
... pass
...
>>> A.__new__
<built-in method __new__ of type object at 0x100229940>
__new__
是我们类中定义的方法,没有任何继承。这是如何运作的? __new__
“来自哪里?”
答案 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的向后兼容性。