访问从另一个模块更改的变量

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 queuemain()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()