715 votes

Comment utiliser le "super" en Python?

Quelqu'un peut-il m'expliquer la différence entre "faire":

class Child(SomeBaseClass):
    def __init__(self):
        super(Child, self).__init__()

et ceci:

class Child(SomeBaseClass):
    def __init__(self):
        SomeBaseClass.__init__(self)

J'ai vu super étant très utilisée dans les classes avec seulement de l'héritage simple. Je peux voir pourquoi vous devriez utiliser dans l'héritage multiple, mais je suis pas clair quels sont les avantages de l'aide dans ce genre de situation.

352voto

John Millikin Points 86775

Les avantages de l' super() dans le seul héritage sont minimes, pour la plupart, vous n'avez pas à coder en dur le nom de la classe de base dans chaque méthode qui utilise ses méthodes parents.

Cependant, il est presque impossible d'utiliser le multi-héritage sans super(). Cela comprend des expressions communes comme mixin, les interfaces, les classes abstraites, etc. Cela s'étend au code, qui plus tard s'étend le vôtre. Si plus tard quelqu'un a voulu écrire une classe qui s'étendait Child et un mixin, leur code ne fonctionnerait pas correctement.

35voto

mhawke Points 10385

N'est pas tous de cette supposons que la classe de base est hérité de l' object?

class A:
    def __init__(self):
        print "A.__init__()"

class B(A):
    def __init__(self):
        print "B.__init__()"
        super(B, self).__init__()

Ne fonctionnera pas. class A doit être issu de l' object,, je.e: class A(object)

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