2010-03-24 8 views
0

Je souhaite appeler une méthode privée redéfinie à partir d'une classe parente abstraite. J'utilise django si ça compte.Appel de la méthode de classe parent privé de la classe parent (django)

class Parent(models.Model): 
    def method1(self): 
     #do somthing 
     self.__method2() 

    def method2(self): 
     pass # I also tried calling up a prent method with super 

class child(Parent): 
    def method1(self) 
     super(Child, self).method1() 

    def __method2(self): 
     #do something 

Je reçois un

AttributeError: "'Chil' object has no attribute '_Parent__method2'" 

Qu'est-ce que je fais mal?

+0

Je devrais probablement ajouter que cela fonctionne parfaitement si la méthode 2 n'est pas privée (méthode2 au lieu de __method2). C'est facile à faire en C++ mais je ne suis pas sûr de savoir comment le faire avec python – philgo20

+0

C'est parce que C++ a en fait * des attributs privés, et ne fait pas de gestion de nom. –

Répondre

3

Les doubles traits de soulignement initiaux empêchent le polymorphisme puisque la définition de méthode et l'appel de méthode sont mutilés, à deux noms différents. Remplacer par un trait de soulignement unique pour résoudre ce problème.

En outre, les doubles underscores sont pas utilisé pour « privé » attributs, et vous devriez jeter tout référence vous a dit qu'ils sont. Ils sont utilisés pour la désambiguïsation MI.

+0

Merci. Je vais devoir relire l'utilisation des undrscores simples et doubles. BTW, merci pour toutes vos réponses, vous êtes d'une grande aide Ignacio. Très apprécié ;-) – philgo20

+0

La "référence" que vous avez demandé de jeter est tirée de la documentation d'aide de Python, juste pour que vous sachiez. – Qix

Questions connexes