2012-06-27 94 views
0

我正在研究一個文本冒險,它將水平存儲爲一個名爲「地點」的大型字典。我認爲我會製作一個名爲'levels.py'的單獨文件來包含它,這樣我的代碼變得更加清晰,並且不再需要經過450多行其他代碼才能添加到其中。導入導入主模塊的模塊

所以,遊戲的主要文件:

from levels import places 

class Thing: 
    #Some stuff 

levels.py:

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

好像不是在遊戲中定義的 '場所',但是。

我認爲發生了什麼是有一個導入'循環'。但是,如果levels.py需要從game.py中導入類,我怎麼能防止類似的東西?

+1

你不能有循環依賴。正確拆分你的模塊。 –

+0

嗯,你*可以*,但這是一個壞主意。 – geoffspear

+0

我的課程還需要地方詞典。 – Cheezey

回答

5

總是可以通過重構來消除循環依賴。移動Thingthing.py,然後在game.pylevels.py使用from thing import Thing。沖洗並重復。

+0

謝謝,但是由於我有很多類,我只是把它們全部放在一個名爲'classes.py'的新文件中,並且兩個文件都導入了它。此外,這使得game.py有更多的實際遊戲玩法和更少的類定義。 – Cheezey

+0

@Cheezey,'進口遊戲\\ ... \\「bleh」:game.Thing(「bleh」)' – astynax

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) 

編輯:

更妙的是移動兩個類都需要到另一個類的數據,他們既可以方便地訪問或導入。例如,像遊戲狀態對象一樣,它在具有功能的類之間傳遞。