Найти - Пользователи
Полная версия: Передача параметров между модулями
Начало » Python для новичков » Передача параметров между модулями
1 2
pal201
в одном модуле работа с сокетом, сообщения с сервера, парсинг их, а в другом модуле работа с ком портом, парсинг сообщений из lpt порта, и в зависимости от сообщений выполнение комманд в каждом из направлений. Так вот при возниконовении событий нужно писать в сокет или в порт соответственно.
PooH
pal201
в одном модуле работа с сокетом, сообщения с сервера, парсинг их, а в другом модуле работа с ком портом, парсинг сообщений из lpt порта, и в зависимости от сообщений выполнение комманд в каждом из направлений. Так вот при возникновении событий нужно писать в сокет или в порт соответственно.
Может сделать третий класс - Диспетчер, экземпляр которого отдается первым двум, они его дергают на события, а уже он разруливает кого из них вызвать. Получаете преимущество - в прежних классах у вас работа с портами, а вся логика в диспетчере.
pal201
так и получится что из этого третьего модуля не будут видны первые два. Если экземпляры его классов передать в модули событий, то из этих модулей можно будет работать с ним, а вот обратно нет. Разве не так? То еть я смогу обработать событие и вызвать третий модуль, но мне нужно будет например записать в сокет, который находится в вызвавшем модуле, это не получится сделать…..
PooH
pal201
так и получится что из этого третьего модуля не будут видны первые два. Если экземпляры его классов передать в модули событий, то из этих модулей можно будет работать с ним, а вот обратно нет. Разве не так? То еть я смогу обработать событие и вызвать третий модуль, но мне нужно будет например записать в сокет, который находится в вызвавшем модуле, это не получится сделать…..
Я имел в виду что-то типа:
#socket_handler.py
class SocketHandler:
def __init__(self, dispatcher):
self.dispatcher = dispatcher

#com_handler.py
class COMHandler:
def __init__(self, dispatcher):
self.dispatcher = dispatcher

#dispatcher.py
class Dispatcher:
def __init__(self, socket, port):
self.socket = socket
self.port = port

#main.py
from socket_handler import SocketHandler
from com_handler import COMHandler
from dispatcher import Dispatcher

d = Dispatcher(SocketHandler(), COMHandler())
d.run()
pal201
PooH
#socket_handler.py class SocketHandler: def __init__(self, dispatcher): self.dispatcher = dispatcher #com_handler.py class COMHandler: def __init__(self, dispatcher): self.dispatcher = dispatcher
в данном случае у каждого из этих классов есть метод run(), который запускает обработку событий в отдельном потоке. В метод Dispatcher требуется передать ссылке на конкретный экземпляр класса, работающий в данный момент(self), в данном примере реализация вызовет сложности, как мне кажется. Но наверно логику действительно выделить в отдельный модуль.
ZZZ
Gunjy
Да, глобальная область видимости - это модуль, но что тебе мешает импортировать основной модуль со словарём в остальные модули.
Я в таком случае рекомендую делать что-то вроде такого:
import sys
sys.modules['settings'] = type('settings', (), {})
Теперь из любого модуля можно сделать import settings и получить общий объект, который можно изменять простым присваиванием/удалением/изменением атрибутов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB