Странный способ передачи данных между модулями в 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вся эта схема не работает. Существует множество способов передачи данных из одного раздела кода в другой, слишком много, чтобы назвать их здесь, и все они подходят для другого сценария и потребности. Например, потоковая передача, отдельные процессы, отдельные компьютерывводят различные ограничения на то, как передача сообщений может и должна происходить.