2017-09-08 6 views
0

J'ai deux fonctions avec le même nom dans deux classes différentes. et ces deux classes sont héritées dans une troisième classe. donc dans ma troisième classe je veux accéder à la fonction de classe spécifique. Comment puis-je le faire ..Accéder à la fonction d'une classe de base spécifique en python

class Base(object): 
    def display(self): 
     return "displaying from Base class" 

class OtherBase(object): 
    def display(self): 
     return "displaying from Other Base class" 

class Multi(Base, OtherBase): 
    def exhibit(self): 
     return self.display() # i want the display function of OtherBase 
+0

classe 'multi (OtherBase, Base)' inverser l'ordre de succession. –

+0

qui fonctionne en changeant l'ordre. mais que faire si j'accède de l'extérieur de la classe. quelque chose comme ci-dessous 'minx = Multi()' 'print minx.exhibit()' – cool77

+0

a ajouté une réponse. –

Répondre

1

Il y a deux façons:

  1. Modifier l'ordre de l'héritage lors de la définition Multi:

    Multi(OtherBase, Base) 
    
  2. appellent la méthode Explicitement display de cette classe:

    xxxxx.display(self) 
    

Pour votre cas d'utilisation particulier, je recommanderais le second. Vous pouvez tirer parti des arguments par défaut et modifier le comportement de votre fonction en fonction de la façon dont elle est appelée.

class Multi(Base, OtherBase): 
    def exhibit(self, other_base=False): 
     if other_base: 
      return OtherBase.display(self) 

     return Base.display(self) 

minx = Multi() 

print minx.exhibit() 
'displaying from Base class' 

print minx.exhibit(other_base=True) 
'displaying from Other Base class' 
1

vous pouvez l'appeler explicitement comme OtherBase.display(self)

1

Vous devez modifier l'ordre de dériver les classes comme class Multi(OtherBase, Base)