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 ()
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)