0
繼承我見過一類象下面這樣:採用超()在課堂上,從對象
from __future__ import print_function
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
爲什麼我們可以在從object
繼承的類使用super
?這是正確的方法嗎?
繼承我見過一類象下面這樣:採用超()在課堂上,從對象
from __future__ import print_function
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
爲什麼我們可以在從object
繼承的類使用super
?這是正確的方法嗎?
是的,這是正確的做法,因爲多重繼承使得如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__()
是做正確的事,並通過super()
傳遞的__init__
鏈,Foo.__init__
正確調用:
>>> Bar()
Foo __init__!
<__main__.Bar object at 0x107155da0>
你爲什麼不能夠?最好持續使用'super',否則在多重繼承上下文中會出現錯誤。 – jonrsharpe