Уведомления

Группа в Telegram: @pythonsu

#1 Март 25, 2010 21:10:50

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметров между модулями

в одном модуле работа с сокетом, сообщения с сервера, парсинг их, а в другом модуле работа с ком портом, парсинг сообщений из lpt порта, и в зависимости от сообщений выполнение комманд в каждом из направлений. Так вот при возниконовении событий нужно писать в сокет или в порт соответственно.



Офлайн

#2 Март 26, 2010 05:58:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Передача параметров между модулями

pal201
в одном модуле работа с сокетом, сообщения с сервера, парсинг их, а в другом модуле работа с ком портом, парсинг сообщений из lpt порта, и в зависимости от сообщений выполнение комманд в каждом из направлений. Так вот при возникновении событий нужно писать в сокет или в порт соответственно.
Может сделать третий класс - Диспетчер, экземпляр которого отдается первым двум, они его дергают на события, а уже он разруливает кого из них вызвать. Получаете преимущество - в прежних классах у вас работа с портами, а вся логика в диспетчере.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Март 26, 2010 11:28:35

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметров между модулями

так и получится что из этого третьего модуля не будут видны первые два. Если экземпляры его классов передать в модули событий, то из этих модулей можно будет работать с ним, а вот обратно нет. Разве не так? То еть я смогу обработать событие и вызвать третий модуль, но мне нужно будет например записать в сокет, который находится в вызвавшем модуле, это не получится сделать…..



Офлайн

#4 Март 26, 2010 12:18:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Передача параметров между модулями

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()



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Март 26, 2010 12:42:08

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача параметров между модулями

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), в данном примере реализация вызовет сложности, как мне кажется. Но наверно логику действительно выделить в отдельный модуль.



Офлайн

#6 Март 26, 2010 18:12:41

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Передача параметров между модулями

Gunjy
Да, глобальная область видимости - это модуль, но что тебе мешает импортировать основной модуль со словарём в остальные модули.
Я в таком случае рекомендую делать что-то вроде такого:
import sys
sys.modules['settings'] = type('settings', (), {})
Теперь из любого модуля можно сделать import settings и получить общий объект, который можно изменять простым присваиванием/удалением/изменением атрибутов.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version