Python 导入导入主模块的模块

Python 导入导入主模块的模块,python,import,module,circular-dependency,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”的文件来包含它,这样我的代码就更干净了,而且不需要通过450多行其他代码来添加它

因此,主要的游戏文件:

from levels import places

class Thing:
    #Some stuff
levels.py:

from game import *
places = {
    "bleh" : Thing("bleh"),
}
不过,游戏中似乎没有定义“地点”


我认为现在发生的是一个重要的“循环”。但是,如果levels.py需要从game.py导入类,我如何防止类似的情况发生?

您可以将
级别更改为具有初始值设定项或工厂方法,以获取
game
提供的对象

例如:

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


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

您可以更改
级别
,使其具有初始值设定项或工厂方法,该方法接受
游戏
提供的对象

例如:

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


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

重构以消除循环依赖总是可能的。将
Thing
移动到
Thing.py
,然后在
game.py
levels.py中使用
从Thing导入Thing
。清洗并重复。

重构以消除循环依赖总是可能的。将
Thing
移动到
Thing.py
,然后在
game.py
levels.py中使用
从Thing导入Thing
。冲洗并重复。

您不能有循环依赖关系。正确拆分模块。当然可以,但这不是一个好主意。我的类还需要places字典。不能有循环依赖关系。正确地拆分模块。当然可以,但这不是个好主意。我的类也需要places字典。谢谢,但是因为我有很多类,所以我把它们都放在一个名为“classes.py”的新文件中,并让这两个文件导入。另外,这使得game.py更接近实际的游戏性,更少的类定义。@Cheezey,
import game\\…\“bleh”:game.Thing(“bleh”)
谢谢,但是因为我有很多类,所以我把它们都放在一个名为“classes.py”的新文件中,并让两个文件都导入。另外,这使得game.py更接近实际的游戏性,更少的类定义。@Cheezey,
import-game\\…\“bleh”:game.Thing(“bleh”)