Seite 1 von 1
Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 16:10
von Brainsucker
Hallo,
wie im Titel beschrieben, suche ich eine Methode um eine Funktion einer Klasse, etwas abzuändern, ohne diese gänzlich und komplett überschreiben zu müssen.
Um Klartext zu reden, will ich am anfang oder am ende der Funktion noch vorher eine andere Funktion ausführen lassen.
Gibts da eine Möglichkeit in Python so eine Art hook & inject vorzunehmen?
Edit: Hier ein kleiner schnipsel Pseudocode, der hoffentlich meine Problematik erklärt:
Code: Alles auswählen
class A():
def func_a(self):
print 'Ich bin eine Funktion'
class B(A):
def func_b(self):
print 'Ich soll vor func_a ausgeführt werden!!'
B().func_a()
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 16:26
von EyDu
Code: Alles auswählen
class B(A):
def func_a(self):
print 'Ich soll vor func_a ausgeführt werden!!'
A.func_a(self)
?
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 16:43
von Brainsucker
damit würdest du die funktion komplett überschreiben, was nicht mein ziel ist, da eben alle (benötigten) parameter usw. ebenso durch die neue funktion überschrieben werden. Daher will ich dass die grundfunktion mit allen benötigten parametern gleich bleibt, nur soll eben diese (in diesemfall parameterlose) funktion vorher automatisch ausgeführt werden.
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 16:54
von BlackJack
@Brainsucker: Die Antwort ändert sich nicht wirklich. Dann musst Du in der überschriebenen halt die gleichen Argumente entgegennehmen und beim Aufruf der Methode in der Basisklasse übergeben.
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 17:06
von EyDu
Bevor du auf falsche Ideen kommst: du musst natürlich nicht jeden Parameter einzeln übergeben
Code: Alles auswählen
class B(A):
def func_a(*args, **kwds):
print 'Ich soll vor func_a ausgeführt werden!!'
A.func_a(*args, **kwds)
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 17:14
von Brainsucker
hmm echt schade, das macht die sache aus meiner sicht deutlich komplizierter :/ wäre echt einfach gewesen, wenn man eine zweifunktion hinten oder vorne anhängen könnte.
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 17:21
von EyDu
Noch weniger Code geht doch kaum. Natürlich könnte man hier und dort noch mit einer Dekoratorfunktion spielen, aber das lohnt sich nur, wenn der Anwendungsfall häufig auftritt.
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 17:29
von Brainsucker
Naja, vielen dank euch allen, habs hinbekommen!
Wobei das arbeiten mit Dekoratorfunktionen sicherlich auch mal sehr interessant wäre. Das wird wohl auch in nächster Zeit früher oder später auf mich zu kommen

Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 17:31
von Hyperion
Brainsucker hat geschrieben:Naja, vielen dank euch allen, habs hinbekommen!
Wie denn? Mit dem Vorschlag von EyDu?
Re: Vererbte funktion ändern ohne sie zu überschreiben?
Verfasst: Montag 24. September 2012, 17:47
von Brainsucker
Hyperion hat geschrieben:Wie denn? Mit dem Vorschlag von EyDu?
So ist es.
Ich war nur immer zu blöd beim neuen Funktionsaufruf das self als ersten parameter hinzuzufügen, desshalb hab ich immer so verdutzt geschaut, als da so massig errors auftauchten. Nun hats aber funktioniert.