Украсьте все функции класса Python, имея возможность доступа к атрибутам класса внутри декоратора.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Украсьте все функции класса Python, имея возможность доступа к атрибутам класса внутри декоратора.

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/769 ... e-class-at
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»