Considere la siguiente pieza de código:
class A: def foo(self): return "A" class B(A): def foo(self): return "B" class C(B): def foo(self): tmp = ... # call A's foo and store the result to tmp return "C"+tmp ¿Qué se escribirá en lugar de ... para que se llame al método abuelo foo en la clase A ? Probé super().foo() , pero solo llama al método principal foo en la clase B .
Estoy usando Phyton 3.
Hay dos maneras de evitar esto:
O puede usar A.foo(self) explícitamente como lo han sugerido los demás: use esto cuando desee llamar al método de la clase A sin tener en cuenta si A es la clase principal de B o no:
class C(B): def foo(self): tmp = A.foo(self) # call A's foo and store the result to tmp return "C"+tmp O, si desea usar el método .foo() de la clase principal de B , independientemente de si la clase principal es A o no, use:
class C(B): def foo(self): tmp = super(B, self).foo() # call B's father's foo and store the result to tmp return "C"+tmpSimplemente puede ser explícito acerca de la clase. super() le permite ser implícito sobre el padre, resolviendo automáticamente el Orden de resolución del método , pero no hay nada más especial al respecto.
class C(B): def foo(self): tmp = A.foo(self) return "C"+tmpLlamar al método del padre de un padre, que ha sido anulado por el padre Ya hay una explicación en esta discusión sobre cómo volver al árbol.