我打开完整的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')
答案 0 :(得分:2)
从一开始就包括基于类的装饰器;引用PEP 318的Design Goals section:
新语法
- 适用于任意包装器,包括用户定义的callables
强调我的。
类是用户定义的callables。调用类会产生一个实例;和类似的函数一样,类实例只是另一个对象。
你可以通过在类上定义__call__
method来使实例可调用,让你用实例替换函数,这一事实一直是语言的一部分,而且永远不需要在PEP中调用。