sagen, dass ich eine Klasse mit einer Reihe von Methoden haben:Python: Etwas für jede Methode einer Klasse tun?
class Human():
def eat():
print("eating")
def sleep():
print("sleeping")
def throne():
print("on the throne")
Dann
alle Methoden mit Ich betreibeJohn=Human()
John.eat()
John.sleep()
John.throne()
Ich möchte print("I am")
für jede Methode wird aufgerufen laufen. Also sollte ich etwas wie
I am:
eating
I am:
sleeping
I am:
on the throne
bekommen Gibt es eine Möglichkeit, dies zu tun, ohne jede Methode neu formatieren müssen?
einen Dekorateur verwenden, ist es für alle Anwendung Methoden: [Einen Decorator an alle Funktionen innerhalb einer Klasse anhängen] (http://stackoverflow.com/q/3467526) und [Einen Klassendekorator schreiben, der einen Decorator auf alle Methoden anwendet] (http://stackoverflow.com/q/6695854) –
Wenn Sie versuchen, die Anzahl der zu bearbeitenden Änderungen zu minimieren, ist es am einfachsten, die Definition der einzelnen Methoden zu ändern. Wenn Sie nach einer Möglichkeit suchen, die Änderung an einem einzigen Ort zu isolieren, um auf eine aktuelle oder zukünftige Methode anwendbar zu sein, sind Dekorateure der richtige Weg. – chepner
Warum nicht eine Funktion 'def do (self, action)' haben, dann wird 'essen' einfach zu' self.do ("essen") und weitere Änderungen an der Ausgabe passieren an einer Stelle. – jonrsharpe