51 votes

Appel d'une méthode de classe de base en Python

J'ai deux classes A et B et A est la classe de base de B.

J'ai lu que toutes les méthodes en Python sont virtuelles.

Ainsi, comment puis-je appeler une méthode de la base parce que lorsque j'essaie de l'appeler, la méthode de la classe dérivée est appelée comme prévu ?

>>> class A(object):
    def print_it(self):
        print 'A'

>>> class B(A):
    def print_it(self):
        print 'B'

>>> x = B()
>>> x.print_it()
B
>>> x.A ???

55voto

user225312 Points 22699

Utilisation de super :

>>> class A(object):
...     def print_it(self):
...             print 'A'
... 
>>> class B(A):
...     def print_it(self):
...             print 'B'
... 
>>> x = B()
>>> x.print_it()                # calls derived class method as expected
B
>>> super(B, x).print_it()      # calls base class method
A

38voto

primroot Points 452

De deux façons :

>>> A.print_it(x)
'A'
>>> super(B, x).print_it()
'A'

2 votes

C'est la première voie qui passe x comme paramètre de l'auto ? Je ne savais pas qu'on pouvait faire ça...

0 votes

@Wilduck. Bonne question, connaissez-vous la réponse à cette question ?

2 votes

Oui, tu passes x comme paramètre propre. Lorsque vous utilisez la méthode sur un objet instancié, par exemple x.print_it() , x est automatiquement donné comme le self paramètre. Lorsque vous utilisez la fonction originale de la définition de la classe ( A.print_it ), A n'est pas un objet instancié de type A Il ne donne donc pas de paramètre A et attend une valeur pour le paramètre self .

-1voto

bonkey Points 1

Réponse simple :

super().print_it()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X