我见过如下课程:
from __future__ import print_function
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
为什么我们可以在继承自super
的类中使用object
?这是正确的做法吗?
答案 0 :(得分:2)
是的,这是正确的做法,因为多重继承会使MyClass
最终落入MRO的不同位置:
>>> class MyClass(object):
... def __init__(self):
... super(MyClass, self).__init__()
...
>>> class Foo(object):
... def __init__(self):
... print('Foo __init__!')
... super(Foo, self).__init__()
...
>>> class Bar(MyClass, Foo):
... pass
...
>>> Bar.__mro__
(<class '__main__.Bar'>, <class '__main__.MyClass'>, <class '__main__.Foo'>, <class 'object'>)
此处Bar
继承MyClass
和Foo
,Foo
位于object
之前。因为,MyClass.__init__()
正在做正确的事情,并通过__init__
传递super()
链,正确调用了Foo.__init__
:
>>> Bar()
Foo __init__!
<__main__.Bar object at 0x107155da0>