我目前正处于学习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)
我是编程/本网站的新手。如果我提供太少/太多的脚本信息,请告诉我。提前致谢!
答案 0 :(得分:1)
您似乎将引擎的map
成员设置为map
模块,而不是Map
对象的实例。如果您在Map
中定义了Engine
和map.py
类,那么您可以在主文件中创建实例,如下所示:
from map import Map, Engine
a_map = Map("scene_1")
game = Engine(a_map)
game.play()
答案 1 :(得分: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
答案 2 :(得分: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)