Héritage et Redéfinition

Document Actions
Réponses: 7   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

Héritage et Redéfinition

Posté par viish le 14/02/2009 11:30
Bonjour,

Je suis en train d'écrire une classe pour une bibliothèque. Dans mon programme principal, je crée une nouvelle classe qui hérite de celle de ma bibliothèque et je voudrais redéfinir quelques une des méthodes.

Mon problème est que les méthodes que je voudrais redéfinir ne sont pas appelées par moi mais par une méthode de la superclasse que je ne voudrais pas avoir à redefinir.

Pour que ce soit un peu plus clair, je vous montre mon code en gros :

Ma superclasse dans superclasse.py :
class superclasse :
def __init__(self) :
...

def methode_principale(self) :
self.petite_methode_1()
self.petite_methode_2()
self.petite_methode_3()

def petite_methode_1(self) :
....

def petite_methode_2(self) :
....

def petite_methode_3(self) :
....

Ma classe qui hérite dans main.py :
class sousclasse :
def __init__(self) :
...

def petite_methode_1(self) :
....

Je voudrais donc redefinir mes "petite_methode_" sans avoir a redefinir methode_principale dans ma classe héritée.

Merci d'avance pour votre aide.

Sylvain.

Re: Héritage et Redéfinition

Posté par viish le 14/02/2009 11:31
*erratum* class sousclasse(superclasse) :

Re: Héritage et Redéfinition

Posté par niavlyss le 16/02/2009 11:42
et c'est quoi ton problème exactement?
tu peux très bien redéfinir petite_methode_1 pour ta sous classe, c'est elle qui sera appliquée si tu appelles ta methode_principale sur une instance de ta sous classe...

Re: Héritage et Redéfinition

Posté par viish le 17/02/2009 14:18
Salut,

Ben mon problème c'est que justement non, ça ne marche pas :'(

Par contre, je me demande si cela ne viendrait pas du fait que methode_principale() de ma superclasse est appelée par le main de celle-ci ...

Re: Héritage et Redéfinition

Posté par niavlyss le 18/02/2009 17:10
ça veut dire quoi exactement, "ça ne marche pas :'( "
ça lève un exception? laquelle?

et je comprends pas non plus, tu parles d'un "main" alors que ta superclasse est définie dans un module??

c'est pas très clair tout ça...

Re: Héritage et Redéfinition

Posté par viish le 19/02/2009 19:22
Salut,

Non, ça ne lève aucune exception, mais ça exécute le code des méthodes définies dans ma superclasse au lieu des méthodes redéfinies.

Mais est-ce que cela ne viendrait il pas du fait que ma "superméthode" méthode_principale qui appelle les méthodes que je voudrai redéfinir est elle même appelée par le constructeur __init__ de ma superclasse ?

Re: Héritage et Redéfinition

Posté par jacko le 23/02/2009 14:05
Comme le montre l'exemple ci-dessous, ce que tu fais devrait fonctionner. On voit bien que c'est "f2 de B" qui est effectivement exécutée, sans avoit eu à redéfinit f1().
code:
class A:
    def __init__(self):
        self.f1()
        
    def f1(self):
        print "f1 de A"
        self.f2()

    def f2(self):
        print "f2 de A"

class B(A):
    def __init__(self):
        A.__init__(self)
        
    def f2(self):
        print "f2 de B"

>>> A()
f1 de A
f2 de A
<__main__.A instance at 0x00D0A5A8>
>>> B()
f1 de A
f2 de B
<__main__.B instance at 0x00D0A210>

Re: Héritage et Redéfinition

Posté par viish le 23/02/2009 15:43
C'est bizarre j'ai grosso-modo le même code mais je n'ai pas le même résultat. Oo

Je vais me replonger la dedans. ^^

Merci beaucoup.

Sylvain

Python.org : Le site officiel du langage Python.
Zope.org : Le site web officiel de Zope.
Daily Python-URL : Actus de l'univers Python.
Tribute to Zyons : Zyons notre ami et membre fondateur de l'Afpy, nous quittait en 2005.