2014-04-23 32 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()) 
相關問題