我打开PEP的完整列表:http://legacy.python.org/dev/peps/并按decorator
关键字搜索。
标题中有两个带有此关键字的PEP:
318: Decorators for Functions and Methods
3129: Class Decorators
但是他们没有说基于类的装饰器...
我想知道何时以及如何将基于类的装饰器引入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')
最佳答案
从一开始就包含了基于类的装饰器。引用PEP 318的Design Goals section:
新语法应
适用于任意包装器,包括用户定义的可调用对象
强调我的。
类是用户定义的可调用对象。调用一个类产生一个实例;和函数一样,类实例只是另一个对象。
您可以通过在类上定义__call__
method来使实例也可调用,从而允许您用实例替换函数,这一事实早已成为语言的一部分,并且不需要在PEP中调用。
关于python - Python中基于类的装饰器-哪个PEP定义语法和语义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24003781/