如何在python中使用子类的方法调用第二个父类的方法?

问题描述:

下面是我的代码:如何在python中使用子类的方法调用第二个父类的方法?

class Parent1(object): 
    def __init__(self): 
     print "!!! ___initialization Parent1___ !!!" 

    def method(self): 
     print "*** method of Parent1 is called ***" 


class Parent2(object): 
    def __init__(self): 
     print "!!! ___initialization Parent2___ !!!" 

    def method(self): 
     print "*** method of Parent2 is called ***" 

class Child(Parent1,Parent2): 
    def __init__(self): 
     print "!!! ___initialization Child___ !!!" 

    def method(self): 
     super(Child,self).method() 
     print "*** method of Child is called ***" 


Ch = Child() 
Ch.method() 

我想打电话给使用子类的对象Parent2method()。条件仅应建立子类对象,并在子类中声明没有变化

Parent2.method(self) 

这就是你所需要的(class Child(Parent1,Parent2):不应该改变。) - 的instance.method()ClassName.method(instance)只是语法糖,因此,所有你需要做的是没有语法糖,它会做的很好。

我改变了Child类这样的:

class Child(Parent1,Parent2): 
    def __init__(self): 
     print "!!! ___initialization Child___ !!!" 

    def method(self): 
     super(Child,self).method() 
     print "*** method of Child is called ***" 
     Parent2.method(self) 

和:

# Out: 
$ python c.py 
!!! ___initialization Child___ !!! 
*** method of Parent1 is called *** 
*** method of Child is called *** 
*** method of Parent2 is called *** 

你得到预期的输出完美的罚款。

+1

你也可以将'super(Child,self).method()'改为'Parent1.method(self)'。这个类层次结构不是为了正确使用'super'而设计的。 – chepner

+0

@詹姆斯:感谢您的解决方案。这是唯一的方法吗?有没有其他方法?不能用super()或decorator来完成吗? –

+0

@Praveenkumar我并不知道其中之一,但我绝不是Python继承方面的专家,可能有一些我不知道的方法。 – James