#python #global-variables #api-design
#python #глобальные переменные #api-дизайн
Вопрос:
Я создаю бота для TS3 с помощью API из github.
В main.py Я создаю экземпляр соединения с именем ts3conn
, использующим класс TS3Connection. Затем я регистрирую событие, подобное этому: `ts3conn.register_for_channel_events(channel_id, event_handler)
В модуле.py я создаю event_handler
подобное:
event_handler(sender, **kw):
event = kw["event"] # variable 'event' contains target_channel_id (to which client moved) and client_id
# Here I need to use the ts3conn instance from main, don't know how.
Итак, я попытался сделать from main import ts3conn
это в модуле.py, но он останавливается. Я пытался понять TS3Connection.py и Events.py (самые важные файлы) но автор использует модуль «blinker», и я понятия не имею, как я могу редактировать эти файлы.
Если вы можете мне помочь, я могу с радостью принять примитивные методы решения проблемы, но также я хочу остаться с текущей структурой main, содержащей каталог connection и modules, содержащий функции, которые используют соединение для связи с сервером TS3.
Ответ №1:
Оберните функцию handling_event классом, который будет передавать ts3conn обработчику при вызове.
class event_handler(object):
def __init__(self, ts3conn):
self.ts3conn = ts3conn
def handle_event(self, sender, **kw):
print(self.ts3conn)
# some operations on ts3conn
# in main
handler = event_handler(ts3conn)
ts3conn.register_for_channel_events(1, handler.handle_event)