me ocurrió con el siguiente código para decorar los métodos de instancia usando un decorador que requiere la instancia a sí mismo como un argumento:Python: hay alguna irregularidad con dinámicamente la asignación de los métodos de instancia como instancia atribuye
from functools import wraps
def logging_decorator(tricky_instance):
def wrapper(fn):
@wraps(fn)
def wrapped(*a, **kw):
if tricky_instance.log:
print("Calling %s.." % fn.__name__)
return fn(*a, **kw)
return wrapped
return wrapper
class Tricky(object):
def __init__(self, log):
self.log = log
self.say_hi = logging_decorator(self)(self.say_hi)
def say_hi(self):
print("Hello, world!")
i1 = Tricky(log=True)
i2 = Tricky(log=False)
i1.say_hi()
i2.say_hi()
Esto parece un gran trabajo , pero me temo que puede haber pasado por alto algunos efectos secundarios involuntarios de este truco. ¿Estoy a punto de pegarme un tiro en el pie, o es seguro?
Tenga en cuenta que en realidad no quiero utilizar esto para el registro, es el ejemplo más breve y significativo que podría surgir.
Parece legítimo. En mi humilde opinión. – Evpok