Я знаю, что существуют решения, подобные описанным здесь. Как украсить все функции класса, не вводя их снова и снова для каждого метода? чтобы добавить декоратор ко всему классу. Однако мне нужен доступ ко всем атрибутам класса внутри декоратора.
Поэтому, используя такой декоратор из другого решения, мне нужно будет иметь доступ ко всем свойствам cls. в ж
Код: Выделить всё
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()
Есть ли у кого-нибудь идеи по поводу как этого добиться? Я также изучал метаклассы, но столкнулся с той же проблемой: невозможность доступа к атрибутам моего класса. Любая помощь очень ценится

Подробнее здесь: https://stackoverflow.com/questions/769 ... e-class-at