使用super()在继承自object的类中

时间:2017-07-12 20:54:31

标签: python python-2.7 python-3.x oop

我见过如下课程:

from __future__ import print_function

class MyClass(object):
    def __init__(self):
        super(MyClass, self).__init__()

为什么我们可以在继承自super的类中使用object?这是正确的做法吗?

1 个答案:

答案 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继承MyClassFooFoo位于object之前。因为,MyClass.__init__()正在做正确的事情,并通过__init__传递super()链,正确调用了Foo.__init__

>>> Bar()
Foo __init__!
<__main__.Bar object at 0x107155da0>