2014-04-23 9 views
0

J'ai 3 classes:Comment utiliser une méthode dans une classe d'une autre classe qui hérite de autre python classe

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

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

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

Et la carte de classe est lancée comme ceci:

a_map = map('central_corridor') 

Il signifie qu'il y a une carte (évidemment pas graphique comme un labyte supposons) dans laquelle la première scène du jeu (le jeu est comme zork) est le couloir central. Donc je veux utiliser la méthode enter de la classe CentralCorridor dans la classe map mais je suis confus par le fait que la classe CnetralCorridor elle-même hérite de la classe Scene. Je ne sais pas comment puis-je utiliser la méthode de délégation comme expliqué ici: https://stackoverflow.com/a/2797332/2572773

Répondre

-1

Tout d'abord, vous devez renommer votre classe de carte, puisque map est une fonction intégrée que vous ombrez ici.

Pour répondre à votre question: vous pouvez appeler CentralCorridor.enter (auto) pour appeler explicitement la méthode de saisir CentralCorridor sur l'instance en cours (qui ne doit pas être une instance CentralCorridor).

+0

donc je peux directement directement CentralCorridor.enter et le définir à une variable dans la classe Carte ?? – kartikeykant18

+0

ce que vous suggérez semble être une très mauvaise idée. Mais peut-être que je ne comprends pas quelque chose. Pourriez-vous fournir un exemple concret? Parce que c'est plus un commentaire qu'une réponse, tel qu'il est actuellement. – rantanplan

0

Est-ce que cette aide de code:

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') 

Vous ne devriez pas utiliser la carte, mais la carte à la place, parce que la carte() est une fonction de construction dans

+0

Je ne comprends pas pourquoi vous devez faire une comparaison de chaîne afin d'instancier l'objet approprié (dans ce cas CentralCorridor). Sauf si vous essayez d'être aussi proche de ce que l'OP a demandé, ce qui est assez brisé de toute façon. – rantanplan

+0

Eh bien, oui j'essaie d'être proche. Puisque je n'ai aucune idée, pourquoi vous appelez un objet avec une chaîne et demandez une méthode. Je suppose qu'en fonction de la chaîne, vous choisirez une méthode à appeler. C'est pourquoi. – Ivaylo

+0

OK, vous essayiez d'être proche de la question originale. Même si je n'ai pas compris le reste de ce que tu as dit. Vous ne choisissez pas une * méthode * en fonction de la chaîne. Vous choisissez un * Classe *. La méthode est toujours * entrer *, autant que je peux voir. C'est pourquoi je n'obtiens pas la comparaison de chaînes. – rantanplan

1

1) Il est une bonne pratique pour les classes Python à Commencez avec une lettre majuscule. En outre, le nom carte est une fonction python intégrée.

2) qu'est-ce qui ne va pas lorsque vous passez une instance de Scène sur votre classe de carte?

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

a_map = Map(CentralCorridor()) 
Questions connexes