访问从另一个模块更改的变量
Access variable that was changed from another module
我正在研究 Python 并创建一个简单的聊天机器人。假设我有一个具有主要功能的模块:
# bot.py
class QueueWrapper:
pass
wrapper = QueueWrapper() # also tried with dict
def main():
wrapper.queue = init_queue()
if __name__ == '__main__':
main()
考虑到还有另一个模块,我想从 bot 模块访问 queue
,但是在 bot.py
模块被调用后的某个时间,这个模块的函数被调用:
# another_module.py
from bot import wrapper
def create_job():
wrapper.queue.do_smth() # <- error. object has no attribute ...
当我尝试访问应该在 wrapper
对象中的 queue
时,我得到错误提示 wrapper
中没有 queue
。但是如果我 运行 在 bot
模块的调试模式下,我可以清楚地看到 wrapper.queue
包含对象。但是当 another_module.py
中的 create_job
函数被调用时,它不知道 wrapper
中有一个 queue
。
我认为这里的问题是 bot.py
中的 var queue
在 main()
和 init_queue()
完成工作后被初始化,但模块本身被导入 another_module
在那之前。
我做错了什么(可能遗漏了一些关于变量范围的信息)以及如何在调用 create_job()
时初始化我的 wrapper.queue
?
提前致谢!
您可以使用 property,以便 queue
属性在首次访问时自动初始化:
class QueueWrapper:
_queue = None
@property
def queue(self):
if self._queue is None:
self._queue = init_queue()
return self._queue
wrapper = QueueWrapper()
我正在研究 Python 并创建一个简单的聊天机器人。假设我有一个具有主要功能的模块:
# bot.py
class QueueWrapper:
pass
wrapper = QueueWrapper() # also tried with dict
def main():
wrapper.queue = init_queue()
if __name__ == '__main__':
main()
考虑到还有另一个模块,我想从 bot 模块访问 queue
,但是在 bot.py
模块被调用后的某个时间,这个模块的函数被调用:
# another_module.py
from bot import wrapper
def create_job():
wrapper.queue.do_smth() # <- error. object has no attribute ...
当我尝试访问应该在 wrapper
对象中的 queue
时,我得到错误提示 wrapper
中没有 queue
。但是如果我 运行 在 bot
模块的调试模式下,我可以清楚地看到 wrapper.queue
包含对象。但是当 another_module.py
中的 create_job
函数被调用时,它不知道 wrapper
中有一个 queue
。
我认为这里的问题是 bot.py
中的 var queue
在 main()
和 init_queue()
完成工作后被初始化,但模块本身被导入 another_module
在那之前。
我做错了什么(可能遗漏了一些关于变量范围的信息)以及如何在调用 create_job()
时初始化我的 wrapper.queue
?
提前致谢!
您可以使用 property,以便 queue
属性在首次访问时自动初始化:
class QueueWrapper:
_queue = None
@property
def queue(self):
if self._queue is None:
self._queue = init_queue()
return self._queue
wrapper = QueueWrapper()