可以在装饰器上使用方法吗?

时间:2020-08-06 10:21:01

标签: python decorator aiortc

当我发现上面有一个方法的装饰器时,我正在看aiortc示例:

@pc.on("datachannel")
    def on_datachannel(channel):
    ...

我不太了解它是如何工作的,或者这段代码是做什么的。我一直在寻找装饰器,我知道有可能有类装饰器,但是没有关于使用方法的装饰器。有人可以详细说明吗?

1 个答案:

答案 0 :(得分:1)

@foo
def bar(): ...

此语法仅是糖:

def bar(): ...
bar = foo(bar)

所以,这个:

@pc.on('datachannel')
def on_datachannel(channel): ...

与以下相同:

def on_datachannel(channel): ...
on_datachannel = pc.on('datachannel')(on_datachannel)

pc是某个对象,pc.on是其上的一个方法,pc.on('datachannel')对其进行调用并返回一个函数,pc.on('datachannel')(on_datachannel)调用该返回的函数并将其传递给{{ 1}}功能。

on_datachannel的实现是这样的:

pc.on

所有内部部分完全是一个接受参数的常规装饰器。它是在类上定义的,对此没有任何影响。