当我发现上面有一个方法的装饰器时,我正在看aiortc示例:
@pc.on("datachannel")
def on_datachannel(channel):
...
我不太了解它是如何工作的,或者这段代码是做什么的。我一直在寻找装饰器,我知道有可能有类装饰器,但是没有关于使用方法的装饰器。有人可以详细说明吗?
答案 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
所有内部部分完全是一个接受参数的常规装饰器。它是在类上定义的,对此没有任何影响。