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'

这里出了什么问题?这些是引擎/地图类:

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)

我是编程/这个网站的新手。如果我提供的脚本信息太少/太多,请告诉我。提前致谢!

4

3 回答 3

1

看来您正在将mapEngine 的成员设置为map模块,而不是Map对象的实例。如果您的MapEngine类在 中定义map.py,那么您可以从主文件创建实例,如下所示:

from map import Map, Engine
a_map = Map("scene_1")
game = Engine(a_map)
game.play()
于 2013-10-03T16:28:36.200 回答
1

在每个模块的开头,您应该列出要导入的函数/类/模块。

如果包含你的类的文件与你的主文件在同一个目录中,很好,你可以这样做(假设包含你的类的文件称为 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()

如果您将文件存储在其他地方,那么您需要将该位置添加到您的 python 路径中。请参阅此处的文档以了解如何识别 sys.path() 中的位置

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

于 2013-10-03T16:29:17.403 回答
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)

于 2013-10-03T16:29:20.443 回答