Невозможно использовать self в python -socketio - PullRequest
0 голосов
/ 25 января 2020

Я не могу использовать 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()

Ошибка :

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

1 Ответ

0 голосов
/ 27 января 2020

By: miguelgrinberg

Правильно, так как же Socket.IO узнает, что значением self должен быть этот тестовый объект, который вы создали в нижней части файла? Когда вы настраиваете свои обработчики таким образом, на самом деле нет никакой ссылки на фактический экземпляр класса Test.

Попробуйте установить обработчики после того, как создан экземпляр класса, возможно, что-то вроде этого:

def run(self):
    sio.on('test', self.test)
    sio.connect('ws://127.0.0.1:5000')
    sio.wait()
...