Surcharger une fonction d'une classe parente

Par une fonction d'une classe enfant

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je bosse actuellement sur un projet en python 2.7

Grosso modo : J'ai la classe Foo qui hérite de Bar. Dans Bar, j'ai une fonction Action() qui fais une action. Dans Foo, j'ai besoin de Action() écrite dans Bar() avec un petit truc en plus.

Sachant que j'appel Foo.Action(), comment faire les deux actions dont j'ai besoin, sans modifier le Action() qui est dans Foo ?

J'ai fais ça :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Foo():
    def Action(self):
       print "Titi"

#Idée numéro 1 :
class Bar(Foo):
    def Action(self):
        print "Toto"
        Foo.Action()

#Idée numéro 2 :
class Bar(Foo):
    def Action(self):
        print "Toto"
        super(Bar, self).Action()


var = Bar()
var.Action()#Doit afficher "Toto\nTiti"

Erreur de l'idée n°1 : TypeError: unbound method Action() must be called with Foo instance as first argument (got int instance instead)

Erreur de l'idée n°2 : TypeError: must be type, not classobj

J'espère que j'ai correctement expliqué le problème. Cordialement, Kr0stAr

+0 -0

Salut,

Tu oublies le self en premier argument de tes méthodes :

1
2
3
4
5
6
7
8
class Foo(object):
    def action(self):
       print "Titi"

class Bar(Foo):
    def action(self):
        print "Toto"
        super(Bar, self).action()  # ou bien Foo.action(self)
+0 -0

Dans ce cas j'aimerais bien que tu m'expliques pourquoi mon code fonctionne et pas le tien. Il y a également le fait que tu n'aies pas instancié ta classe avant d'appeler sa méthode :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo(object):
...     def action(self):
...        print "Titi"
... 
>>> class Bar(Foo):
...     def action(self):
...         print "Toto"
...         super(Bar, self).action()  # ou bien Foo.action(self)
... 
>>> b = Bar()
>>> b.action()
Toto
Titi
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte