Avec l'exemple de code suivant, peut-on utiliser super
ou C
pour appeler A.foo
et B.foo
explicitement?héritage multiple python à partir de chemins différents avec le même nom de méthode
class A(object):
def foo(self):
print 'A.foo()'
class B(object):
def foo(self):
print 'B.foo()'
class C(A, B):
def foo(self):
print 'C.foo()'
A.foo(self)
B.foo(self)
Merci pour la réponse. Maintenant je ne me sens plus sale pour ne pas utiliser super(). – sayap
Lorsque vous appelez explicitement les méthodes de classe de base * can * pour des scénarios très simples comme l'exemple du questionneur, il se décomposera si les classes de base héritent d'une base commune et que vous ne souhaitez pas appeler la méthode . Ceci est connu comme "l'héritage du diamant" et c'est un gros problème pour de nombreux systèmes d'héritage multiple (comme en C++). L'héritage multiple collaboratif de Python (avec 'super()') vous permet de le résoudre facilement dans de nombreux cas (même si cela ne veut pas dire qu'une hiérarchie coopérative d'héritage multiple est facile à concevoir ou toujours une bonne idée). – Blckknght