有可能在decorator上使用方法吗



我在查看aiortc示例时,注意到一个装饰器上有一个方法:

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

我真的不明白这是如何工作的,也不明白这段代码是做什么的。我一直在搜索decorator,我知道有类decorator是可能的,但没有关于使用方法的。有人能详细说明一下吗?

@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)调用返回的函数并将on_datachannel函数传递给它。

pc.on的实现是这样的:

class PC:
def on(self, event):
...
def wrapper(fn):
...
def inner_wrapper(*args, **kwargs):
...
fn(*args, **kwargs)
return inner_wrapper
return wrapper
pc = PC()

所有内部部分完全是一个接受参数的常规装饰器。它是在类上定义的,这对它没有什么区别

相关内容

  • 没有找到相关文章

最新更新