Python中基于类的修饰符-哪个PEP定义语法和语义?

Python中基于类的修饰符-哪个PEP定义语法和语义?,python,decorator,python-decorators,pep,Python,Decorator,Python Decorators,Pep,我打开政治公众人物的完整列表:并通过decorator关键字进行搜索 标题中有两个具有此关键字的政治公众人物: 但是他们没有提到任何关于基于类的装饰器 我想知道基于类的修饰符何时以及如何引入Python 更新我谈论的是: class NoArgsClassDecorator: def __init__(self, f): self.f = f def __call__(self): print('Inside %s.__call__()

我打开政治公众人物的完整列表:并通过
decorator
关键字进行搜索

标题中有两个具有此关键字的政治公众人物:

但是他们没有提到任何关于基于类的装饰器

我想知道基于类的修饰符何时以及如何引入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')

从一开始就包括了基于类的装饰器;引用政治公众人物第318条:

新语法应该

  • 适用于任意包装,包括用户定义的可调用项
我的

类是用户定义的可调用项。调用一个类产生一个实例;和函数一样,类实例只是另一个对象


通过在类上定义一个函数,让您用实例替换函数,也可以使实例可调用,这一事实长期以来一直是该语言的一部分,而且从来都不需要在PEP中调用

“基于类的装饰器”是什么意思?如果你指的是类上的装饰者,那就是你链接的第二个。如果您指的是用作装饰器的类或类实例,那么这是允许任意调用作为装饰器的自然结果。没有人说过它必须是一个真正的函数;类是可调用的。@MartijnPieters谢谢,我不知道什么是可调用的+1.