Ereditarietà Python
Ereditarietà Python
L'ereditarietà ci consente di definire una classe che eredita tutti i metodi e le proprietà da un'altra classe.
La classe padre è la classe da cui viene ereditata, chiamata anche classe base.
La classe figlia è la classe che eredita da un'altra classe, detta anche classe derivata.
Crea una classe genitore
Qualsiasi classe può essere una classe genitore, quindi la sintassi è la stessa della creazione di qualsiasi altra classe:
Esempio
Crea una classe denominata Person
, con
firstname
e lastname
proprietà e un printname
metodo:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname,
self.lastname)
#Use the Person class to create an object, and then
execute the printname method:
x = Person("John", "Doe")
x.printname()
Crea una classe figlio
Per creare una classe che erediti la funzionalità da un'altra classe, invia la classe genitore come parametro durante la creazione della classe figlia:
Esempio
Crea una classe denominata Student
, che erediterà le proprietà e i metodi dalla Person
classe:
class Student(Person):
pass
Nota: utilizzare la pass
parola chiave quando non si desidera aggiungere altre proprietà o metodi alla classe.
Ora la classe Student ha le stesse proprietà e metodi della classe Person.
Esempio
Usa la Student
classe per creare un oggetto, quindi esegui il printname
metodo:
x = Student("Mike", "Olsen")
x.printname()
Aggiungi la funzione __init__()
Finora abbiamo creato una classe figlia che eredita le proprietà e i metodi dal suo genitore.
Vogliamo aggiungere la __init__()
funzione alla classe figlio (invece della pass
parola chiave).
Nota: la __init__()
funzione viene chiamata automaticamente ogni volta che la classe viene utilizzata per creare un nuovo oggetto.
Esempio
Aggiungi la __init__()
funzione alla
Student
classe:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Quando aggiungi la __init__()
funzione, la classe figlia non erediterà più la __init__()
funzione del genitore.
Nota:__init__()
la
funzione del figlio ha la precedenza sull'ereditarietà della
__init__()
funzione del genitore.
Per mantenere l'ereditarietà della __init__()
funzione padre, aggiungi una chiamata alla __init__()
funzione padre:
Esempio
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Ora abbiamo aggiunto con successo la funzione __init__() e mantenuto l'ereditarietà della classe genitore, e siamo pronti per aggiungere funzionalità nella
__init__()
funzione.
Usa la funzione super()
Python ha anche una super()
funzione che farà ereditare alla classe figlia tutti i metodi e le proprietà dal suo genitore:
Esempio
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Utilizzando la super()
funzione, non è necessario utilizzare il nome dell'elemento genitore, erediterà automaticamente i metodi e le proprietà dal suo genitore.
Aggiungi proprietà
Esempio
Aggiungi una proprietà chiamata graduationyear
alla
Student
classe:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
Nell'esempio seguente, l'anno 2019
dovrebbe essere una variabile e trasmesso alla
Student
classe durante la creazione degli oggetti studente. Per farlo, aggiungi un altro parametro nella funzione __init__():
Esempio
Aggiungi un year
parametro e passa l'anno corretto durante la creazione di oggetti:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Aggiungi metodi
Esempio
Aggiungi un metodo chiamato welcome
alla
Student
classe:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
def welcome(self):
print("Welcome",
self.firstname, self.lastname, "to the class of", self.graduationyear)
Se si aggiunge un metodo nella classe figlio con lo stesso nome di una funzione nella classe padre, l'ereditarietà del metodo padre verrà sovrascritta.