导入导入主模块的模块

时间:2012-06-27 15:52:52

标签: python import module circular-dependency

我正在进行文本冒险,将关卡存储为一个名为“地方”的大型词典。我没有把它放在主文件中,而是认为我会创建一个名为'levels.py'的单独文件来包含它,使我的代码更清晰,并且无需经过450多行其他代码添加到它

所以,主要游戏文件:

from levels import places

class Thing:
    #Some stuff

levels.py:

from game import *
places = {
    "bleh" : Thing("bleh"),
}

然而,似乎“地方”并未在游戏中定义。

我认为正在发生的是有一个导入'循环'。但是,如果levels.py需要从game.py导入类,我怎么能阻止类似的东西?

2 个答案:

答案 0 :(得分:5)

总是可以重构来消除循环依赖。将Thing移至thing.py,然后移至game.py,将levels.py移至from thing import Thing。冲洗并重复。

答案 1 :(得分:0)

您可以将levels更改为使用game提供的对象的初始值设定项或工厂方法。

例如:

# levels.py
# no import needed here; we'll just take an instance when required
def get_places(thing):
    return {"bleh": thing("bleh")}

# game.py

import levels

class Thing:
    def __init__(self):
        self.places = levels.get_places(self)

修改

更好的方法是将两个类所需的数据移动到另一个可以轻松访问或导入的类中。就像游戏状态对象一样,它在具有功能的类之间传递。