使用装饰器打印 python-socketio 事件信息

Print python-socketio events infos using decorators

我想改进 socketio.event 装饰器,让它打印触发的事件及其参数。 我有一个 Manager class,它有一个 self.sio: socketio.Server 属性。我尝试将新的装饰器定义为 Manager 方法,例如 returns 由 self.sio.event 装饰的函数,它还打印其数据。我试过这个解决方案,但它不起作用:

    def event(self, func):
        @self.sio.event
        def wrapper(*args, **kwargs):
            print(f'[{func.__name__}] : {args} {kwargs}')
            func(*args, **kwargs)
        return wrapper

有什么推荐吗?

我认为这样的东西应该适合你:

    def event(self, func):
        def wrapper(*args, **kwargs):
            print(f'[{func.__name__}] : {args} {kwargs}')
            return func(*args, **kwargs)
        return self.sio.on(func.__name__, wrapper)

您不能真正在包装器上使用 @sio.event,因为这样将要配置的事件将被命名为 wrapper。我的解决方案使用 @sio.on 装饰器,它显式接受事件名称。