@MasterCopipaster

Как передать в данном примере объект в функцию в данном примере websocket.WebSocketApp?

как я в данном случае могу передать перменную c в строке c = Config() в функцию on_message что бы каждый раз когда WebSocketApp вызывает ее, я имел доступ к конфигу внутри неё не используя глобальные переменные
from modules.config import Config
import json
import websocket
import _thread
import time
import rel


def on_message(ws, message):
    print(message)


def on_error(ws, error):
    print(error)

def on_close(ws, close_status_code, close_msg):
    print("### closed ###")

def on_open(ws):
    print("Opened connection")

if __name__ == '__main__':
    c = Config()
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://echo.websocket.events",
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)

    ws.run_forever(dispatcher=rel,
                   reconnect=5)  # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly
    rel.signal(2, rel.abort)  # Keyboard Interrupt
    rel.dispatch()
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
Kanakagawa
@Kanakagawa
Увлекаюсь программированием на языке python
Можно передать объект c в функцию on_message с использованием lambda-функции или partial-функции из модуля functools.
from modules.config import Config
import json
import websocket
import _thread
import time
import rel
from functools import partial

def on_message(c, ws, message):
    print(c.some_property)  # Пример использования свойства объекта Config
    print(message)

# Остальные функции on_error, on_close, on_open остаются без изменений

if __name__ == '__main__':
    c = Config()
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://echo.websocket.events",
                                on_open=on_open,
                                on_message=partial(on_message, c),  # Передача объекта c через partial-функцию
                                on_error=on_error,
                                on_close=on_close)

    ws.run_forever(dispatcher=rel,
                   reconnect=5)
    rel.signal(2, rel.abort)
    rel.dispatch()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы