Найти - Пользователи
Полная версия: Передача параметров между модулями
Начало » Python для новичков » Передача параметров между модулями
1 2
pal201
Помогите пожалуйста:
есть модуль в котором есть словарь dict={}

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

нужно обеспечить возможность из каждого модуля изменять значения словаря. Как решить проблему? Даже если объявить в каждом модуле global dict, все равно не видно тот словарь, что объявлен в главном модуле ведь на сколько я понимаю - область видимости global - модуль ;-(
Gunjy
Да, глобальная область видимости - это модуль, но что тебе мешает импортировать основной модуль со словарём в остальные модули.
pal201
Спасибо! Дейчтвительно, так и нужно поступить. Что это я не допер сам?! Еще раз спасибо!
lizzard
Перекрёстный импорт? По моему не самая лучшая идея, лучше поменять архитектуру, имхо :). Как вариант, можно вынести нужный словарь в отдельный модуль и импортировать его везде, где надо, или передавать в качестве параметра, в зависимости от того, что Вам конкретно надо.
pal201
Да да, именно в отдельный модуль. Только вероятно возникнет проблема, что после импортирования область видимости станет локальной и изменятся будет не общий словарь, а экземпляр конкретного модуля.
Еще вопрос:
нужно из одного модуля обращаться к методам другого.
В главном модуле созданы экземпляры классов из модуля а и модуля б, из главного модуля я прекрасно могу работать с методами экземпляров классов каждого модуля. Но мне так же нужно, что бы модули могли ображться сми к методам другого модуля. Как сделать так что бы они видели друг друга?
Спасибо!
lizzard
# 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'}
Вы про это?

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

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

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

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


class b():
с=a(self)
передать ссылку на самого себя, правильно я делаю?
и тогда из другого модуля(класса) можно будет работать с методами класса b я правильно понимаю?
lizzard
pal201, можете подробнее описать что и зачем вы хотите сделать? Зачем одному классу вызывать методы другого класса, если первый не содержит объектов второго класса?
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