2017-02-02 4 views
-1

Ich habe eine Reihe von class Objekte, die alle von einer Basisklasse erben. Einige von ihnen überschreiben eine Methode (save) und machen Sachen. Für diesen speziellen Anwendungsfall möchte ich vorübergehend die Verwendung der Kind-save-Methode (falls sie existiert) erzwingen, statt dessen die Verwendung der Eltern-Methode save zu erzwingen.Aufruf einer übergeordneten Methode von außerhalb des Kindes

class BaseClass(object): 
    def save(self, *args, **kwargs): 
     print("Base Called") 

class Foo(BaseClass): 
    def save(self, *args, **kwargs): 
     # do_stuff 
     print("Foo called") 
     return super(Foo, self).save(*args, **kwargs) 

obj = Foo() 

Wie kann ich nennen obj Elternteil speichern von außerhalb des Kindes, so dass es „Basis Called“ druckt?

+0

Was meinen Sie? Du meinst * nur * drucke "Base Called"? –

+0

Grundsätzlich ignorieren Sie die Child-Save-Methode vollständig und nur die übergeordnete Methode – rh0dium

+0

Sie können immer 'BaseClass.save (Obj)' tun. Oder verwenden Sie "Super", wenn Sie möchten, dass es allgemeiner ist. Obwohl das ** schreit ** "Ich sollte keine Vererbung verwenden" –

Antwort

3

Sie können mit super()

super(type(obj), obj).save() 

Methoden von einem Objekte Eltern rufen, wenn ich dies auszuführen:

class BaseClass(object): 
    def save(self, *args, **kwargs): 
     print("Base Called") 

class Foo(BaseClass): 
    def save(self, *args, **kwargs): 
     # do_stuff 
     print("Foo called") 
     return super(Foo, self).save(*args, **kwargs) 

obj = Foo() 
super(type(obj), obj).save() 

Der Ausgang:

Base Called 
+0

Dumb Frage funktioniert das, auch wenn es initialisiert wurde? – rh0dium

+0

Ich denke schon, habe die Antwort mit dem Code bearbeitet, den ich getestet habe. –

+0

Perfekter Dank! – rh0dium

Verwandte Themen