导入模块并创建它的实例

时间:2013-10-03 16:05:05

标签: python object module instance

我目前正处于学习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)

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

3 个答案:

答案 0 :(得分:1)

您似乎将引擎的map成员设置为map模块,而不是Map对象的实例。如果您在Map中定义了Enginemap.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)