Странный способ передачи данных между модулями в Python: как это работает?
Я должен работать с каким-то беспорядочным кодом, который я не написал сам, и среди этого беспорядка я обнаружил два сценария, которые общаются таким странным образом (через 3-й сценарий посредника):
message.py
, сценарий "посредника":
class m():
pass
sender.py
, Кто хочет отправить некоторую информацию получателю:
from message import m
someCalculationResult = 1 + 2
m.result = someCalculationResult
receiver.py
, Кто хочет напечатать некоторые результаты, полученные с помощью sender.py
:
from message import m
mInstance = m()
print mInstance.result
И, по волшебству, в интерпретаторе, импортируя sender.py
, то receiver.py
действительно печатает 3...
Использование Python 2.6.6
1 ответ:
Это просто запутанный способ установить глобальный.
m
является классом,m.result
атрибутом класса. И отправитель, и получатель могут получить к нему прямой доступ, так же как они могут получить доступ кm
.Они могли бы сделать и это:
# sender import message message.result = someCalculationResult # receiver import message print message.result
Здесь
Следует отметить, что вы выполняете не запуск отдельных скриптов; вы импортируете модули в один и тот же интерпретатор. Если вы побежалиresult
-это просто имя в модуле верхнего уровняmessage
.python sender.py
во-первых, без импортаreciever.py
, а затем отдельно запускpython receiver.py
без импортаsender.py
вся эта схема не работает. Существует множество способов передачи данных из одного раздела кода в другой, слишком много, чтобы назвать их здесь, и все они подходят для другого сценария и потребности. Например, потоковая передача, отдельные процессы, отдельные компьютерывводят различные ограничения на то, как передача сообщений может и должна происходить.