2012-06-27 1 views
0

나는 수준을 'places'라고하는 방대한 사전으로 저장하는 텍스트 모험을하고 있습니다. 메인 파일에 넣는 대신에, '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.pyfrom 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) 

편집 :

더 나은 두 클래스가 다른 클래스에 필요한 데이터를 이동하는 것입니다 그들은 쉽게 액세스 모두 또는 가져 오기. 예를 들어, 게임 상태 객체와 마찬가지로,이 객체는 기능을 가진 클래스간에 전달됩니다.