Im folgenden Code wurden die Methoden (print_a
und print_b
) der Klasse Test
von den zwei verschiedenen Dekorateuren dekoriert.Wie bekomme ich den Namen des Dekorators für die Funktion zur Laufzeit?
Wie kann ich feststellen, dass die angegebene Methode (sagen wir print_a
), mit einem bestimmten Dekorator (decorator1
) zur Laufzeit dekoriert ist?
Die einfache Lösung ist es, den Namen der Wrapper-Funktion zu ändern, das heißt die Methode wrapper
-wrapper1
und wrapper2
in der Dekorateur zu ändern, aber das Problem mit dieser ist, ich habe keine Kontrolle über diesen Teil des Codes.
Hat Python eine Reflektions-API wie Java, und könnte mir das hier helfen?
def my_decorator1(func):
def wrapper(*args, **kwargs):
print('I am decorated:1')
func(*args, **kwargs)
return wrapper
def my_decorator2(func):
def wrapper(*args, **kwargs):
print('I am decorated:2')
func(*args, **kwargs)
return wrapper
class Test():
def __init__(self, a=None, b=None):
self.a = a
self.b = b
@my_decorator1
def print_a(self):
print('Value of a is {}'.format(self.a))
@my_decorator2
def print_b(self):
print('Value of b is {}'.format(self.b))
if __name__ == '__main__':
d = Test.__dict__
f1 = d.get('print_a')
f2 = d.get('print_b')
Der OP sagte, er habe keinen Zugang zu den Decorator-Definitionen. – clemens