Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2010 12:00:40

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

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

Помогите пожалуйста:
есть модуль в котором есть словарь dict={}

есть есть несколько модулей, которые импортируются в главный модуль import modul….

нужно обеспечить возможность из каждого модуля изменять значения словаря. Как решить проблему? Даже если объявить в каждом модуле global dict, все равно не видно тот словарь, что объявлен в главном модуле ведь на сколько я понимаю - область видимости global - модуль ;-(



Офлайн

#2 Март 22, 2010 12:20:41

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

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

Офлайн

#3 Март 22, 2010 18:47:29

Gunjy
От:
Зарегистрирован: 2009-07-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Да, глобальная область видимости - это модуль, но что тебе мешает импортировать основной модуль со словарём в остальные модули.



Офлайн

#4 Март 23, 2010 07:33:24

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

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

Спасибо! Дейчтвительно, так и нужно поступить. Что это я не допер сам?! Еще раз спасибо!



Офлайн

#5 Март 24, 2010 00:23:45

lizzard
От:
Зарегистрирован: 2009-03-05
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Перекрёстный импорт? По моему не самая лучшая идея, лучше поменять архитектуру, имхо :). Как вариант, можно вынести нужный словарь в отдельный модуль и импортировать его везде, где надо, или передавать в качестве параметра, в зависимости от того, что Вам конкретно надо.



Офлайн

#6 Март 25, 2010 14:33:23

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

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

Да да, именно в отдельный модуль. Только вероятно возникнет проблема, что после импортирования область видимости станет локальной и изменятся будет не общий словарь, а экземпляр конкретного модуля.
Еще вопрос:
нужно из одного модуля обращаться к методам другого.
В главном модуле созданы экземпляры классов из модуля а и модуля б, из главного модуля я прекрасно могу работать с методами экземпляров классов каждого модуля. Но мне так же нужно, что бы модули могли ображться сми к методам другого модуля. Как сделать так что бы они видели друг друга?
Спасибо!



Офлайн

#7 Март 25, 2010 15:21:31

lizzard
От:
Зарегистрирован: 2009-03-05
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

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

# a.py:
from shared import d

print 'Before import:', d
d[0] = 'modified by a'

import b
print 'After import:', d

b.change_d()
print 'After b.change_d()', d

# b.py:
from shared import d

print '[b] d:', d
d[0] = 'modified by b'

def change_d():
d[1] = 'changed by b'

# shared.py:
d = {0: 123, 1: 321}
Результат выполнения a.py:
Before import: {0: 123, 1: 321}
[b] d: {0: 'modified by a', 1: 321}
After import: {0: 'modified by b', 1: 321}
After b.change_d() {0: 'modified by b', 1: 'changed by b'}
Вы про это?

Насчёт модулей, не буду оригинальным, но по моему лучше опять поменять структуру проекта :).



Офлайн

#8 Март 25, 2010 15:54:59

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

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

Логика обработки каждого модуля сделана в классе модуля:
a.py
class parser():
код обработки событий сокета
class parser() должен обращаться к методам b

b.py
class parser():
код обработки событий
class parser() должен обращаться к методам a

экземпляры класса создаются в гланом модуле.

Что я делаю не правильно?
Спасибо!



Офлайн

#9 Март 25, 2010 18:40:40

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

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

Начал переделывать структуру, как и рекомендовали. Подумал, а ведь можно в другой класс передать self исходного класса, но как? Имею ввиду:
class a():
def __init__(sefl,obj):
self.obj-obj
тело класса


class b():
с=a(self)
передать ссылку на самого себя, правильно я делаю?
и тогда из другого модуля(класса) можно будет работать с методами класса b я правильно понимаю?



Офлайн

#10 Март 25, 2010 19:05:33

lizzard
От:
Зарегистрирован: 2009-03-05
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

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

pal201, можете подробнее описать что и зачем вы хотите сделать? Зачем одному классу вызывать методы другого класса, если первый не содержит объектов второго класса?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version