2014-04-23 37 views
0

继承另一个类我有3类:如何在一个类中使用的方法从从另一个类蟒蛇

class Scene(object): 
    def enter(self): 
     pass 

class CentralCorridor(Scene): 
    def enter(self): 
     pass 

class Map(object): 
    def __init__(self, start_game): 
     pass 

和类图开始是这样的:

a_map = map('central_corridor') 

它意味着有一张地图(显然不是像迷宫那样的图形,让我们假设),其中游戏的第一个场景(游戏像zork)是中央走廊。

所以我想在地图类中使用CentralCorridor类的enter方法,但是我很困惑类CnetralCorridor本身继承自类Scene。我不知道如何使用这里的解释方法:https://stackoverflow.com/a/2797332/2572773

回答

-1

首先,您应该重命名您的地图类,因为map是您将在此处隐藏的内置函数。

要回答你的问题:你可以调用CentralCorridor.enter(self)来显式调用当前实例的CentralCorridor的enter方法(不必为CentralCorridor实例)。

+0

所以我可以直接对CentralCorridor.enter并将其设置为Map类中的变量? – kartikeykant18

+0

你的建议似乎是一个非常糟糕的主意。但也许我误解了一些东西。你能提供一个实际的例子吗?因为这更像是评论而不是回答,因为它现在是这样。 – rantanplan

0

请问这段代码的帮助:

class Scene(object): 
    def enter(self): 
     print 'Scene Object' 

class CentralCorridor(Scene): 
    def enter(self): 
     print 'CentralCorridor object' 

class Map(object): 
    def __init__(self, start_game): 
     self.start_game = start_game 
     if self.start_game == 'central_corridor': 
      whatever = CentralCorridor().enter() 

a_map = Map('central_corridor') 

你不应该使用的地图,但地图替代,因为地图()是一个内置的功能

+0

我不明白为什么你必须做一个字符串比较才能实例化正确的对象(在本例中为CentralCorridor)。除非你想尽量接近OP所要求的东西,无论如何这个问题还是很严重的。 – rantanplan

+0

嗯,是的,我正在努力接近。既然我不知道,为什么你用一个字符串调用一个对象并要求一个方法。我想根据字符串,你会选择一种方法来调用。这就是为什么。 – Ivaylo

+0

好吧,你正试图接近原来的问题。虽然我没有得到你所说的其余部分。根据字符串的不同,您不会选择*方法*。你选择一个*类*。就我所见,该方法总是*输入*。这就是为什么我没有得到字符串比较。 – rantanplan

1

1)它是Python类,以一个很好的做法从大写字母开始。 此外,名称地图是一个内置的python函数。

2)在地图类上传递一个Scene实例有什么问题?

class Map(object): 
    def __init__(self, scene): 
     self.scene = scene 
    def enter(self): 
     self.scene.enter() 

a_map = Map(CentralCorridor()) 
相关问题