从另一个模块

时间:2017-11-03 21:25:46

标签: python python-3.x python-import

我正在学习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 queuebot.pymain()完成工作后被初始化但模块本身被导入init_queue()在此之前。

我做错了什么(可能缺少关于变量范围的内容)以及如何在调用another_module时初始化我的wrapper.queue

提前致谢!

1 个答案:

答案 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()