Декораторы на основе классов в Python - какой PEP определяет синтаксис и семантику?
Я открываю полный список PEP: http://legacy.python.org/dev/peps/ и выполняю поиск по decorator
ключевое слово.
Есть два PEP с этим ключевым словом в заголовке:
но они ничего не говорят о декораторах на основе классов...
Интересно, когда и как основанные на классах декораторы введены в Python.
ОБНОВЛЕНИЕ Я говорю о:
class NoArgsClassDecorator:
def __init__(self, f):
self.f = f
def __call__(self):
print('Inside %s.__call__(). You call %s()' % (self.__class__, self.f.__name__))
self.f()
print('Inside %s.__call__(). We finish %s()' % (self.__class__, self.f.__name__))
@NoArgsClassDecorator
def hello():
print('hello')
1 ответ
Классовые декораторы были включены с самого начала; процитировав раздел "Цели проектирования " в PEP 318:
Новый синтаксис должен
- работать с произвольными обертками, включая определяемые пользователем вызовы
Акцент мой.
Классы определяются пользователем. Вызов класса создает экземпляр; и как функции, экземпляры классов - это просто еще один объект.
Тот факт, что вы можете сделать экземпляры вызываемыми тоже путем определения __call__
Метод класса, позволяющий заменять функции экземплярами, долгое время был частью языка и никогда не нуждался в вызове в PEP.