Sto cercando una soluzione pitonica su come memorizzare un metodo che viene chiamato su un oggetto proprio all'interno dell'oggetto.Come catturare qualsiasi metodo chiamato su un oggetto in python?
Perché in pitone, se voglio prendere ad esempio il metodo abs()
, voglio sovraccaricare questo operatore come:
Catcher(object):
def __abs__(self):
self.function = abs
c = Catcher()
abs(c) # Now c.function stores 'abs' as it was called on c
Se voglio prendere una funzione, che hanno un altro attributo in essa, per esempio pow()
, ho intenzione di usare questo:
Catcher(object):
def __pow__(self, value):
self.function = pow
self.value = value
c = Catcher()
c ** 2 # Now c.function stores 'pow', and c.value stores '2'
Ora, quello che sto cercando è una soluzione generale, per catturare e memorizzare qualsiasi tipo di funzione chiamata sul Catcher
, senza l'implementazione di tutti i sovraccarichi, e altri casi. E come puoi vedere, voglio anche memorizzare i valori (magari in una lista, se ce n'è più di uno?) che sono gli attributi di un metodo.
Grazie in anticipo!
E le funzioni che non delegano a un metodo dunder? – delnan
Si potrebbe voler guardare in classe decoratori e metaclassi. –
@delnan Suppongo che anche quelli siano OK, perché nel mio caso queste funzioni cercano qualcos'altro, un valore o un metodo da chiamare. –