Ereditarietà
L’ereditarietà fornisce un modo per condividere delle funzionalità tra classe diverse.
Pensiamo a diverse classi di tipo Triangolo, Quadrato, Pentagono. Queste classi differiscono sotto alcuni aspetti ma hanno anche altri aspetti che li accomunano (per esempio il colore, l’area, ecc.).
Quindi si potrebbe presumere che esista una superclasse che abbia tutte le caratteristiche che li accomuni tutte. Per esempio, in questo caso si potrebbe creare Figura come superclasse. Per ereditare le caratteristiche di una classe da parte di un’altra classe si pone la superclasse come argomento.
class Figura:
def __init__(self,colore,area):
self.colore = colore
self.area = area
def assegna(self):
print("Sono una figura")
class Triangolo(Figura):
def assegna(self):
print("Sono un triangolo")
class Quadrato(Figura):
def assegna(self):
print("Sono un quadrato")scaleno = Triangolo("rosso",120)
quadro = Quadrato("giallo", 16)quadro.assegna()
print(quadro.colore)
scaleno.assegna()
print(scaleno.colore)
Come si può ben vedere, se nelle sottoclasse (subclass) viene definito un metodo già esistente nella superclasse, questo verrà sovrascritto (non verrà ereditato).
L’ereditarietà si dice indiretta tra le classi A e C, quando una classe A eredita da una superclasse B che a sua volta eredita da una superclasse C.
Il metodo super()
Quando è necessario riferirsi esplicitamente ad un’attributo o ad un metodo di una superclasse, si utilizza il metodo super().
class Figura:
def __init__(self,colore,area):
self.colore = colore
self.area = area
def assegna(self):
print("Sono una figura")
class Quadrato(Figura):
def assegna(self):
print("Sono un quadrato")
super().assegna()
quadro = Quadrato("giallo", 16)
quadro.assegna()
eseguendo
>>>
Sono un quadrato
Sono una figura
Vai a Lezione 7.4 – Ciclo di vita di un oggetto ⇒