Je travaille avec du code qui a 3 niveaux d'héritage de classe. À partir de la classe dérivée de niveau le plus bas, quelle est la syntaxe pour appeler une méthode sur 2 niveaux dans la hiérarchie, par ex. un super appel? La classe "intermédiaire" n'implémente pas la méthode à appeler.
Eh bien, c'est une façon de le faire:
class Grandparent(object):
def my_method(self):
print "Grandparent"
class Parent(Grandparent):
def my_method(self):
print "Parent"
class Child(Parent):
def my_method(self):
print "Hello Grandparent"
Grandparent.my_method(self)
C’est peut-être pas ce que vous voulez, mais c’est le meilleur python a sauf erreur de ma part. Ce que vous demandez est digne de l’anti-Pythonique et vous auriez à expliquer pourquoi vous le faites nous allons vous donner la manière heureuse python de faire les choses.
Un autre exemple, peut-être ce que vous voulez (d'après vos commentaires):
class Grandparent(object):
def my_method(self):
print "Grandparent"
class Parent(Grandparent):
def some_other_method(self):
print "Parent"
class Child(Parent):
def my_method(self):
print "Hello Grandparent"
super(Child, self).my_method()
Comme vous pouvez le constater, Parent
n'implémente pas my_method
mais Child
peut toujours utiliser super pour obtenir la méthode que Parent
"voit", c.-à-d. Grandparent
's my_method
.
Cela fonctionne pour moi:
class Grandparent(object):
def my_method(self):
print "Grandparent"
class Parent(Grandparent):
def my_method(self):
print "Parent"
class Child(Parent):
def my_method(self):
print "Hello Grandparent"
super(Parent, self).my_method()
Fabriqué et testé dans python 3
class Vehicle:
# Initializer / Instance Attributes
def __init__(self, name, price):
self.name = name
self.price = price
# instance's methods
def description(self):
print("\nThe car {} has a price of {} eur".format(self.name, self.price))
#Object Vehicle
m3 = Vehicle("BMW M3", 40000)
m3.description()
class Camper(Vehicle):
def __init__(self,nome,prezzo,mq):
super().__init__(nome,prezzo)
self.mq=mq
# instance's methods
def description(self):
super().description()
print("It has a dimension of",format(self.mq)+" mq")
#Camper Object(A camper is also a Vehicle)
marcopolo=Camper("Mercede MarcoPolo",80000,15)
marcopolo.description()
Sortie:
La voiture BMW M3 a un prix de 40000 eur
La voiture Mercede MarcoPolo a un prix de 80000 euros
Il a une dimension de 15 mq