Python -overerving
Python-overerving
Overerving stelt ons in staat een klasse te definiëren die alle methoden en eigenschappen van een andere klasse erft.
Bovenliggende klasse is de klasse waarvan wordt geërfd, ook wel basisklasse genoemd.
Onderliggende klasse is de klasse die erft van een andere klasse, ook wel afgeleide klasse genoemd.
Een ouderklas maken
Elke klasse kan een bovenliggende klasse zijn, dus de syntaxis is hetzelfde als het maken van een andere klasse:
Voorbeeld
Maak een klasse met de naam Person
, met
firstname
en lastname
eigenschappen, en een printname
methode:
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()
Een kinderklas maken
Als u een klasse wilt maken die de functionaliteit van een andere klasse erft, verzendt u de bovenliggende klasse als parameter bij het maken van de onderliggende klasse:
Voorbeeld
Maak een klasse met de naam Student
, die de eigenschappen en methoden van de klasse zal erven Person
:
class Student(Person):
pass
Opmerking: gebruik het pass
trefwoord als u geen andere eigenschappen of methoden aan de klasse wilt toevoegen.
De klasse Student heeft nu dezelfde eigenschappen en methoden als de klasse Person.
Voorbeeld
Gebruik de Student
klasse om een object te maken en voer vervolgens de printname
methode uit:
x = Student("Mike", "Olsen")
x.printname()
Voeg de __init__() Functie toe
Tot nu toe hebben we een onderliggende klasse gemaakt die de eigenschappen en methoden van de bovenliggende klasse erft.
We willen de __init__()
functie toevoegen aan de onderliggende klasse (in plaats van het pass
sleutelwoord).
Opmerking: de __init__()
functie wordt automatisch aangeroepen elke keer dat de klasse wordt gebruikt om een nieuw object te maken.
Voorbeeld
Voeg de __init__()
functie toe aan de
Student
klasse:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Wanneer u de __init__()
functie toevoegt, neemt de onderliggende klasse niet langer de functie van de bovenliggende over __init__()
.
Opmerking:__init__()
de
functie van het kind heeft voorrang op de overerving van de functie van de ouder
__init__()
.
Om de overerving van de bovenliggende __init__()
functie te behouden, voegt u een aanroep toe aan de bovenliggende __init__()
functie:
Voorbeeld
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Nu hebben we met succes de functie __init__() toegevoegd en de overerving van de bovenliggende klasse behouden, en we zijn klaar om functionaliteit aan de
__init__()
functie toe te voegen.
Gebruik de functie super()
Python heeft ook een super()
functie die ervoor zorgt dat de onderliggende klasse alle methoden en eigenschappen van zijn bovenliggende klasse erft:
Voorbeeld
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Door de super()
functie te gebruiken, hoeft u de naam van het bovenliggende element niet te gebruiken, het zal automatisch de methoden en eigenschappen van het bovenliggende element erven.
Eigenschappen toevoegen
Voorbeeld
Voeg een aangeroepen eigenschap graduationyear
toe aan de
Student
klasse:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
In het onderstaande voorbeeld moet het jaar 2019
een variabele zijn en worden doorgegeven aan de
Student
klas bij het maken van leerlingobjecten. Voeg hiervoor nog een parameter toe aan de functie __init__():
Voorbeeld
Voeg een year
parameter toe en geef het juiste jaar door bij het maken van objecten:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Methoden toevoegen
Voorbeeld
Voeg een methode toe die welcome
aan de
Student
klasse wordt aangeroepen:
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)
Als u een methode in de onderliggende klasse toevoegt met dezelfde naam als een functie in de bovenliggende klasse, wordt de overerving van de bovenliggende methode overschreven.