2017-07-12 90 views
0

繼承我見過一類象下面這樣:採用超()在課堂上,從對象

from __future__ import print_function 

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

爲什麼我們可以在從object繼承的類使用super?這是正確的方法嗎?

+0

你爲什麼不能夠?最好持續使用'super',否則在多重繼承上下文中會出現錯誤。 – jonrsharpe

回答

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繼承來自MyClassFoo,將Fooobject前。因爲,MyClass.__init__()是做正確的事,並通過super()傳遞的__init__鏈,Foo.__init__正確調用:

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