Dire che ho una classe con un sacco di metodi:Python: fai qualcosa per qualsiasi metodo di una classe?
class Human():
def eat():
print("eating")
def sleep():
print("sleeping")
def throne():
print("on the throne")
Poi corro tutti i metodi con
John=Human()
John.eat()
John.sleep()
John.throne()
voglio correre print("I am")
per ogni metodo chiamato. Quindi dovrei ottenere qualcosa come
I am:
eating
I am:
sleeping
I am:
on the throne
C'è un modo per farlo senza dover riformattare ogni metodo?
Utilizzare un decoratore, applicandolo a tutti metodi: [Allegare un decoratore a tutte le funzioni all'interno di una classe] (http://stackoverflow.com/q/3467526) e [Scrivere un decoratore di classe che applica un decoratore a tutti i metodi] (http://stackoverflow.com/q/6695854) –
Se si sta tentando di ridurre al minimo il numero di modifiche che è necessario apportare, la cosa più semplice da fare è semplicemente modificare la definizione di ciascun metodo. Se stai cercando un modo per isolare la modifica in un singolo luogo, per essere applicabile a qualsiasi metodo attuale o futuro, i decoratori sono la strada da percorrere. – chepner
Perché non avere una funzione 'def do (self, action)', quindi 'eat' diventa semplicemente self.do (" eating ")' e qualsiasi altra modifica all'output avviene in un posto. – jonrsharpe