从另一个modu更改的访问变量

2024-09-29 00:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习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.pycreate_job函数时,它并不知道在wrapper中有一个queue

在我看来,这里的问题是来自bot.py的var queuemain()init_queue()完成工作之后被初始化,但是模块本身在那之前被导入了another_module

我做错了什么(可能遗漏了变量作用域的某些内容),如何在调用create_job()时初始化我的wrapper.queue

提前谢谢


Tags: 模块对象函数pyqueueinitmaindef
1条回答
网友
1楼 · 发布于 2024-09-29 00:22:26

您可以使用property,以便queue属性在首次访问时自动初始化:

class QueueWrapper:
    _queue = None

    @property
    def queue(self):
        if self._queue is None:
            self._queue = init_queue()
        return self._queue

wrapper = QueueWrapper()

相关问题 更多 >