problème d'héritage python 2.6
Bonjour,
J'ai une classe mère (classe_mere) qui contient 2 fonctions membres (fonction_publique et __fontion_privee), la fonction fonction_publique fait appel à __fontion_privee:
Code:
1 2 3 4 5 6 7
| class classe_mere(object):
def fonction_publique():
...
self.__fontion_privee("chose")
def __fontion_privee(element):
... |
Maintenant j'ai une classe fille (classe_fille) héritant de la classe mère, celle-ci comporte des modifications importantes de la __fonction_privee, mais 'aucune' pour la fonction_publique. Est-il possible de ne pas faire un 'copié/collé' de la fonction_publique de la classe mère vers la classe fille, en d'autre terme, comment faire pour que la fonction membre fonction_publique de la classe fille fasse référence à la nouvelle fonction membre __fonction_privee de la classe fille et non pas à la __fonction_privee de la classe mère?
Code:
1 2 3 4
| class classe_fille(classe_mere):
def __fontion_privee(element):
#Nouveau code
... |
Merci infiniment!!
PS: sinon je vois une autre solution: casser la fonction_publique en trois: une faisant les traitements avant appel de la __fonction_privee, la __fonction_privee, une faisant les traitements après la __fonction_privee et une dernière fonction appelant les trois.... je trouve ça très laid.. y-a-t-il une solution élégante?
[Résolu] Problème d'héritage python 2.6
Merci beaucoup!!
En effet j'ai fait plusieurs erreurs, ayant fait du C++ en OO il y a quelque temps j'ai juste besoin de me rafraichir la mémoire et m'adapter à l'OO en python. En effet je me suis fait bloqué par la fonction privée, j'aurai due la déclarée protégée!
Et en effet les fonctions protégées n'existe pas en python de ce que j'ai lu:
http://docs.python.org/2/reference/l...of-identifiers
finalement la solution est assez simple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # -*- coding: utf-8 -*-
class Main(object):
def public(self):
text = self._protected()
print("Je suis %s" %text)
print("et j'appel une fonction " + self.__private())
def _protected(self):
return "la fonction protégée de Main"
def __private(self):
return "privée"
class Fille(Main):
def public(self):
Main.public(self)
def _protected(self):
return "la fonction protégée de Fille"
m = Main()
f = Fille()
m.public()
f.public()
print "J'appel une fonction protégée de " + f._protected()
print "J'appel une fonction privée " + f._Main__private() |
Résultat:
Je suis la fonction protégée de Main
et j'appel une fonction privée
Je suis la fonction protégée de Fille
et j'appel une fonction privée
J'appel une fonction protégée de la fonction protégée de Fille
J'appel une fonction privée privée
finalement on peut même forcer la main aux fonctions privées :?
Merci encore ! :D