TL; DR Come scoprire se una funzione è stata definita utilizzando @classmethod
o qualcosa con lo stesso effetto?Verificare se una funzione utilizza @classmethod
mio problema
Per attuare un decoratore classe desidero controllare se un metodo prende la classe come primo parametro, ad esempio come ottenuto tramite
@classmethod
def function(cls, ...):
ho trovato una soluzione per verificare @staticmethod
tramite il modulo types
(isinstance(foo, types.UnboundMethodType)
è False
se lo foo
è statico, vedere here), Ma non ha trovato nulla su come farlo per @classmethod
Contesto
Quello che sto cercando di fare è qualcosa sulla falsariga di
def class_decorator(cls):
for member in cls.__dict__:
if (isclassmethod(getattr(cls, member))):
# do something with the method
setattr(cls, member, modified_method)
return cls
e lo faccio non so come implementare quello che ho chiamato isclassmethod
in questo esempio
Questo vale solo per Python 3 –
C'è qualcosa che funziona sia per Python 2 che per Python 3 (personalmente, utilizzo 2.7) – hlt