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

2024-05-17 19:03:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 方法代码decorators示例ondefchannel装饰
1条回答
网友
1楼 · 发布于 2024-05-17 19:03:20
@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()

所有的内在部分都是一个接受论点的常规装饰者。它是在类上定义的,这对它没有影响

相关问题 更多 >