2013-10-03 1 views
0

저는 현재 Python을 배우기 시작했습니다. 나는 수업을 사용하여 게임을 만들었습니다. 하지만 이제는이 클래스들을 다른 파일에 넣고 메인 파일에서 가져와야합니다. 지금 당장 가지고 있습니다 :모듈 가져 오기 및 인스턴스 만들기

a_map = Map("scene_1") 
game = Engine(a_map) 
game.play() 

모듈을 사용하여 이런 인스턴스를 만들 수없는 것 같습니다.

a_map = __import__('map') 
game = Engine(a_map) 
game.play() 

을하지만 잘못 여기 무슨 일이야 나에게 오류

AttributeError: 'module' object has no attribute 'first_scene' 

을 제공합니다 : I 시도? 이들은 엔진 /지도 클래스입니다 :

class Engine(object): 

def __init__(self, map): 
    self.map = map 

def play(self): 
    current_scene = self.map.first_scene() 
    while True: 
     next = current_scene.enter() #call return value of the current scene to 'next' 
     current_scene = self.map.next_scene(next) #defines the subsequent scene 

class Map(object): 

scenes = {"scene_1" : Scene1(), 
      "scene_2" : Scene2(), 
      "scene_3" : Scene3() 
     } 

def __init__(self, start_scene): 
    self.start_scene = start_scene 

#defines the first scene, using the 'scenes' array. 
def first_scene(self): 
    return Map.scenes.get(self.start_scene) 

#defines the second scene, using the 'scenes' array.  
def next_scene(self, next_scene): 
    return Map.scenes.get(next_scene) 

나는 프로그래밍 /이 웹 사이트에 새로운 해요. 너무 적은/너무 많은 스크립트 정보를 주시면 알려 주시기 바랍니다. 미리 감사드립니다!

답변

1

엔진의 map 구성원을 map 모듈로 설정하고 Map 개체의 인스턴스를 설정하지 않은 것처럼 보입니다. 당신이 가져올 함수/클래스/모듈을 나열해야 각 모듈의 시작 부분에서

from map import Map, Engine 
a_map = Map("scene_1") 
game = Engine(a_map) 
game.play() 
1

: 당신의 MapEngine 클래스가 map.py에 정의되어있는 경우, 당신은이 같은 기본 파일에서 인스턴스를 생성 할 수 있습니다 .

클래스를 포함하는 파일이 메인 파일과 같은 디렉토리에있는 경우, 큰, 당신은이 (foo.py 및 bar.py이라고 클래스를 포함하는 파일을 가정) 할 수 있습니다

from foo import Map 
from bar import Engine 

다음 나중에 주 파일

a_map_instance = Map('scene_1') 
an_engine_instance = Engine(a_map_instance) 
an_engine_instance.play() 

에서 다른 곳 저장된 파일을 가지고 있다면, 당신은 당신의 파이썬 경로에 해당 위치를 추가해야합니다. sys.path()에있는 위치를 식별하는 방법은 여기 설명서를 참조하십시오.

http://docs.python.org/2/tutorial/modules.html#the-module-search-path.

+0

감사를 수행 할 수 것, 모듈에서 특정 항목을 가져올 수 있습니다! 시도 할 때 : '지도 가져 오기에서' 오류가 있습니다 : 'ImportError : 이름 맵을 가져올 수 없습니다'. '가져 오기 맵'을 시도하면 다음 오류가 표시됩니다. AttributeError : '모듈'객체에 '맵'속성이 없습니다. 파일들은 모두 같은 디렉토리에 있습니다 ... – Felix

+0

Felix - Map 클래스를 포함하는 파일의 이름은 무엇입니까? 확실히 map.py입니까? 파이썬 인터프리터는 지정한 이름을 가진 모듈에 대해 실행중인 스크립트와 동일한 디렉토리를 검색합니다. – melipone

+0

나는 'ex45files.py'(주 파일), 'map.py'(지도 클래스 포함), 'engine.py'(엔진 클래스 포함)의 세 파일을 가지고있다. 그 3을 정확히 같은 디렉토리에 넣겠지만, 오류가 발생합니다 : AttributeError : 'module'객체에 'Map'속성이 없습니다. 코드 사용 : 'a_map = map.Map ('scene_1 ') game = engine.Engine (a_map) game.play()' 나에게 새로운 것은 메인 파일 (ex45files)을 실행할 때입니다. py), 그것은 3 개의 파일 모두에 대해 '.pyc'파일을 만듭니다 ... – Felix

0

Map 클래스가 map.py이고 engine 클래스가 engine.py라고 가정하면 파일로 가져와야합니다. 모듈 안에 정의 된 것을 사용할 때도 모듈을 참조해야합니다. 예를 들어 :

import map 
import engine 

a_map = map.Map('scene_1') 
game = engine.Engine(a_map) 
game.play() 

또한 from map import Map 당신이 대답들에 대한 a_map = Map('scene_1)