0

「場所」と呼ばれる大規模な辞書としてレベルを保存するテキスト アドベンチャーに取り組んでいます。メインファイルに入れる代わりに、それを含む「levels.py」という別のファイルを作成し、コードをよりきれいにして、450行以上の他のコードを追加する必要をなくすことを考えました.

したがって、メインのゲーム ファイル:

from levels import places

class Thing:
    #Some stuff

レベル.py:

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

ただし、ゲームでは「場所」が定義されていないようです。

何が起こっているのかというと、インポートの「ループ」があると思います。ただし、levels.py が game.py からクラスをインポートする必要がある場合、どうすればそのようなことを防ぐことができますか?

4

2 に答える 2

6

循環依存を排除​​するためにリファクタリングすることは常に可能です。に移動Thingthing.py、次に ingame.pyおよび in levels.pyuseに移動しますfrom thing import Thing。すすいで繰り返します。

于 2012-06-27T15:58:52.583 に答える
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)

編集:

さらに良いのは、両方のクラスが必要とするデータを、両方が簡単にアクセスまたはインポートできる別のクラスに移動することです。たとえば、機能を持つクラス間で受け渡されるゲーム状態オブジェクトのように。

于 2012-06-27T15:57:54.173 に答える