0

我不能在一个类中使用self。看起来装饰器后的函数的数据是第一个参数。

例子:

import socketio

import random

sio = socketio.Client()


class Test:
    def __init__(self):
        self.uid = random.randint(0, 10)

    @sio.on('test')
    def test(self, message):
        test_message = str(self.uid) + message
        print(test_message)

    @staticmethod
    def run():
        sio.connect('ws://127.0.0.1:5000')
        sio.wait()


if __name__ == '__main__':
    test = Test()
    test.run()

错误:</p>

TypeError: test() missing 1 required positional argument: 'message'
4

1 回答 1

1

作者:米格尔格林伯格

对,那么 Socket.IO 怎么知道 self 的值应该是你在文件底部附近创建的这个测试对象?当您以这种方式设置处理程序时,实际上没有链接到 Test 类的实际实例。

一旦类被实例化,尝试设置处理程序,可能是这样的:

def run(self):
    sio.on('test', self.test)
    sio.connect('ws://127.0.0.1:5000')
    sio.wait()
于 2020-01-27T07:25:53.997 回答