2012-05-20 35 views
2

如果已经回答了此问题,我很抱歉,我无法找到它。 使用多重继承时,如何使用特定父级的方法? 比方说,我有这样的事情在Python中调用具有多重继承的父类

Class Ancestor: 
    def gene: 

Class Dad(Ancestor): 
    def gene: 
     ... 

Class Mom(Ancestor): 
    def gene: 
     ... 

Class Child(Dad,Mom): 
    def gene: 
     if(dad is dominant): 
      #call dad's gene 
     else: 
      #call mom's gene 

我怎么能这样做? super()没有指定特定父项的选项。 谢谢! 编辑:忘了提及一个非常重要的细节 - 方法是相同的名称,并被覆盖。对不起,再次感谢!

回答

12

这不是super的用途。 super只是为了调用继承层次结构中的下一个项目,无论它是什么 - 换句话说,当你不知道或关心该层次结构是什么时,应该使用它。

对于您的情况,您可能只是想直接调用该方法。但请注意,你实际上并不需要在所有处理的祖先,因为methodAmethodB不反正覆盖:所以你可以打电话给他们上self

if whatever: 
    self.methodA() 
else: 
    self.methodB() 

如果你是在你的情况重写的方法,您需要指定祖先:

class C(A, B): 
    def methodA(self): 
     if whatever: 
      A.methodA(self) 
     else: 
      B.methodA(self)