Ich weiß, dass es Lösungen wie die hier erklärten gibt. Wie alle Funktionen einer Klasse dekorieren, ohne sie für jede Methode immer wieder einzugeben? um der gesamten Klasse einen Dekorateur hinzuzufügen. Allerdings muss ich Zugriff auf alle Klassenattribute innerhalb des Decorators haben.
Wenn ich also den Decorator aus der anderen Lösung auf diese Weise verwende, müsste ich auf alle Eigenschaften von cls zugreifen können im f
Code: Select all
def function_decorator(orig_func):
def decorator(*args, **kwargs):
print("Decorating wrapper called for method %s" % orig_func.__name__)
result = orig_func(*args, **kwargs)
return result
return decorator
def class_decorator(decorator):
def decorate(cls):
# this doesn't work
# print(cls.name)
for attr in cls.__dict__:
if callable(getattr(cls, attr)):
setattr(cls, attr, decorator(getattr(cls, attr)))
return cls
return decorate
@class_decorator(function_decorator)
class PersonWithClassDecorator:
def __init__(self, name):
self.name = name
def print_name(self):
print(self.name)
me = PersonWithClassDecorator("Me")
me.print_name()
Hat jemand eine Idee dazu? Wie erreicht man das? Ich habe mich auch mit Metaklassen befasst, bin aber auf das gleiche Problem gestoßen, dass ich nicht auf die Attribute meiner Klasse zugreifen konnte. Wir freuen uns über jede Hilfe
