python inheritance polymorphism

title python



¿Cómo referirse a un método padre en python? (7)

¿Comprueba mi respuesta en Llamar al método de una clase padre de una clase hijo en Python? .

Es un ligero giro en algunos otros aquí (que no usan super).

Esta pregunta ya tiene una respuesta aquí:

Supongamos que tengo dos clases (una padre y una subclase). ¿Cómo me refiero a un método en la clase principal si el método también se define en la subclase diferente?

Aquí está el código:

class A: def __init__(self, num): self.value=num def f(self, num): return self.value+2 class B(A): def f(self, num): return 7*self.f(num)

En la última línea, quiero referirme a la clase principal A con el comando "self.f (num)", no al método en B que crearía una recursión infinita. Gracias de antemano.


¿Por qué no mantenerlo simple?

class B(A): def f(self, num): return 7 * A.f(self, num)


En línea con las otras respuestas, hay varias formas de llamar a los métodos de superclase (incluido el constructor), sin embargo, en Python-3.x el proceso se ha simplificado:

Python-2.x

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

Python-3.x

class A(object): def __init__(self): print "world" class B(A): def __init__(self): print "hello" super().__init__()

super() ahora es equivalente a super(<containing classname>, self) según los documentos .


Si sabe que quiere usar A, también puede referirse explícitamente a A de esta manera:

class B(A): def f(self,num): return 7 * A.f(self,num)

recuerde que debe dar explícitamente el argumento propio a la función miembro Af ()


Utilice super :

return 7 * super(B, self).f(num)

O en Python 3, es solo:

return 7 * super().f(num)


puedes usar super o si puedes ser más explícito y hacer algo como esto.

class B(A): def f(self, num): return 7 * A.f(self, num)


class B(A): def f(self, num): return 7 * super(B, self).f(num)