我打开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/

10-11 07:53