2016-01-20 32 views
0

的當我執行以下命令:使用超()在python

class animal(object): 
     def desc(self): 
      print 'animal' 
class human(): 
     def desc(self): 
       print 'human' 
class satyr(human, animal): 
     def desc(self): 
       print 'satyr' 

grover=satyr() 
super(satyr, grover).desc() 

我得到的人! 但是人類甚至沒有繼承這個類對象,並且我認爲super只有在類對象被繼承時才起作用。 (新風格類)

現在,如果我讓動物也不繼承類對象,我得到一個錯誤。 這是怎麼回事?

+1

請格式化您的代碼 –

+2

可能的重複 - http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with-multiple-inheritance –

+0

@Brendan,不,它不是。我已經閱讀過。那個人詢問蟒蛇從左到右的方法。 – Tinkidinki

回答

2

它這樣工作,因爲只有其中一個類或繼承類需要從object繼承,以便您的類由object使用的元類創建。元類控制着這種MRO行爲。

這是one of the better answers on stack overflow explaining metaclasses

在python 3中,這是毫無意義的,因爲一切都是新式的類。另外,真的沒有理由不是繼承自object,所以除非你不得不使用一些舊類庫不帶有從object繼承的類,否則你可能會讓所有的類繼承它。

+0

謝謝。這有很大幫助。 – Tinkidinki