2016-01-20 5 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() 

я человек! Но человек даже не наследовал объект класса, и я думаю, что супер работает, только если объект класса наследуется. (Класс нового стиля)

Теперь, если я заставляю животных также не наследовать объект класса, я получаю сообщение об ошибке. Что здесь происходит?

+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, все это спорно, так как все это класс нового типа. Кроме того, на самом деле нет причин NOT, чтобы наследовать от object, поэтому, если вы не вынуждены использовать какую-то старую библиотеку с классами, которые не наследуются от object, вы также можете унаследовать все свои классы.

+0

Спасибо. Это очень помогло. – Tinkidinki

Смежные вопросы