在python中使用super()

时间:2016-01-20 09:15:07

标签: python inheritance multiple-inheritance superclass

执行以下操作时:

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 个答案:

答案 0 :(得分:2)

它的工作方式是这样的,因为只有一个类或继承的类需要从object继承,以便您的类由object使用的元类创建。元类控制此MRO行为。

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

在python 3中,这一切都没有实际意义,因为一切都是新式的。此外,确实没有理由 NOT object继承,所以除非你被迫使用一些旧的图书馆,而这些图书馆不会继承自object,您也可以从中继承所有类。