Supposons que j'ai deux classes (une parent et une sous-classe). Comment est-ce que je fais référence à une méthode de la classe parente si la méthode est également définie dans la sous-classe différente?
Voici le code:
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)
Dans la toute dernière ligne, je veux faire référence à la classe parente A avec la commande "self.f (num)", pas à la méthode elle-même en B qui créerait une récursion infinie. Merci d'avance.
Si vous savez que vous voulez utiliser A, vous pouvez également vous référer explicitement à A de cette manière:
class B(A):
def f(self,num):
return 7 * A.f(self,num)
rappelez-vous que vous devez donner explicitement l'auto-argument à la fonction membre A.f ()
Utilisez super
:
return 7 * super(B, self).f(num)
Ou en python 3, c'est juste:
return 7 * super().f(num)
En ligne avec les autres réponses, il existe plusieurs façons d'appeler des méthodes de super classe (y compris le constructeur), cependant, dans Python-3.x, le processus a été simplifié:
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()
est maintenant équivalent à super(<containing classname>, self)
selon les docs .
Pourquoi ne pas garder les choses simples?
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)
Découvrez ma réponse à Appelez la méthode d'une classe parent à partir de la classe enfant en Python? .
C'est une légère torsion sur certains autres ici (qui n'utilisent pas super).
vous pouvez utiliser super ou si vous pouvez être plus explicite et faire quelque chose comme ça.
class B(A):
def f(self, num):
return 7 * A.f(self, num)