我正在学习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 ...
当我尝试访问应位于queue
对象中的wrapper
时,我得到错误并说明queue
中没有wrapper
。但是如果我在bot
模块上以调试模式运行,我可以清楚地看到wrapper.queue
包含对象。但是,当调用来自create_job
的{{1}}函数时,它不知道another_module.py
中存在queue
。
我认为这里的问题是来自wrapper
的var queue
在bot.py
和main()
完成工作后被初始化但模块本身被导入init_queue()
在此之前。
我做错了什么(可能缺少关于变量范围的内容)以及如何在调用another_module
时初始化我的wrapper.queue
?
提前致谢!
答案 0 :(得分:0)
您可以使用property,以便queue
属性在首次访问时自动初始化:
class QueueWrapper:
_queue = None
@property
def queue(self):
if self._queue is None:
self._queue = init_queue()
return self._queue
wrapper = QueueWrapper()