2011-11-12 4 views
1

Lorsque j'appelle method1() de la classe externe, elle finit par appeler la méthode dérivée method1() à la place. Comment puis-je le forcer à appeler la méthode de classe de base1? Est-il préférable pour la classe interne d'avoir un init et d'appeler le parent init?Appel d'une méthode de classe de base à partir d'une classe de base

class OuterClassA 
    __init__ 
     method1() 

    def method1(self): 
     .... 

class InnerClassB(OuterClassA) 

    def method1(self): 
    .... 

Répondre

2

Appelez la classe de base method1().

OuterClassA.method1(someClassBObject) 
+1

Désolé, ce n'est pas l'approche préférée du problème. –

+0

La solution préférée est de ne pas courir dedans en premier lieu. Le demandeur a décidé que l'évitement n'est pas bon, alors le reste est de déterminer quelle solution bleepy est la moins horrible. –

+0

Il existe des cas d'utilisation légitimes pour vouloir laisser une sous-classe remplacer une méthode sans interrompre la capacité du parent à effectuer des appels internes directs. –

3

Le double nom de caractères de soulignement de Python est conçu pour résoudre ce problème. Pour les détails et un exemple détaillé, voir: http://docs.python.org/tutorial/classes.html#private-variables et http://docs.python.org/reference/expressions.html#atom-identifiers.

class OuterClassA: 
    def __init__(self): 
     self.__method1()  # call this class's private copy 

    def method1(self): 
     ... 
    __method1 = method1  # make a private (class local) copy 


class InnerClassB(OuterClassA) 
    def method1(self): 
     ... 
Questions connexes