2016-08-05 42 views
0

Unten ist mein Code: using Objekt der KinderklasseWie Methode der zweiten Elternklasse mit Methode der Kindklasse in Python aufrufen?

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() 

I method() von Parent2 Klasse anrufen möchten. Die Bedingungen sind nur Objekt Kind Klasse sollte in der Kinderklassendeklaration erstellt und keine Änderung wird

Antwort

1
Parent2.method(self) 

Das ist alles, was Sie brauchen (class Child(Parent1,Parent2): nicht geändert sollte.) - die instance.method() für ClassName.method(instance) nur syntaktischer Zucker, also alles, was Sie tun müssen, ist es ohne den syntaktischen Zucker und es wird gut gehen.

Ich habe die Child Klasse dazu:

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) 

Und:

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

Sie die erwartete Ausgabe völlig in Ordnung bekommen.

+1

Sie können auch 'super (Child, self) .method()' in 'Parent1.method (self)' ebenso ändern. Diese Klassenhierarchie ist nicht dafür ausgelegt, 'super' richtig zu verwenden. – chepner

+0

@James: Danke für die Lösung. Ist das die einzige Möglichkeit? Gibt es einen anderen Weg? Kann es nicht mit super() oder Dekorator gemacht werden? –

+0

@Praveenkumar Ich bin mir dessen nicht bewusst, aber ich bin keineswegs ein Experte für Python-Vererbung, es ist möglich, dass es einen Weg gibt, von dem ich nichts weiß. – James