Python Erfenis
Python Erfenis
Oorerwing laat ons toe om 'n klas te definieer wat al die metodes en eienskappe van 'n ander klas erf.
Ouerklas is die klas waarvandaan geërf word, ook genoem basisklas.
Kinderklas is die klas wat van 'n ander klas erf, ook genoem afgeleide klas.
Skep 'n ouerklas
Enige klas kan 'n ouerklas wees, so die sintaksis is dieselfde as om enige ander klas te skep:
Voorbeeld
Skep 'n klas met die naam Person
, met
firstname
en lastname
eienskappe, en 'n printname
metode:
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()
Skep 'n Kinderklas
Om 'n klas te skep wat die funksionaliteit van 'n ander klas erf, stuur die ouerklas as 'n parameter wanneer die kinderklas geskep word:
Voorbeeld
Skep 'n klas met die naam Student
, wat die eienskappe en metodes van die Person
klas sal erf:
class Student(Person):
pass
Let wel: Gebruik die pass
sleutelwoord wanneer jy nie enige ander eienskappe of metodes by die klas wil voeg nie.
Nou het die Studenteklas dieselfde eienskappe en metodes as die Persoonklas.
Voorbeeld
Gebruik die Student
klas om 'n objek te skep, en voer dan die printname
metode uit:
x = Student("Mike", "Olsen")
x.printname()
Voeg die __init__() funksie by
Tot dusver het ons 'n kinderklas geskep wat die eienskappe en metodes van sy ouer erf.
Ons wil die __init__()
funksie by die kinderklas voeg (in plaas van die pass
sleutelwoord).
Let wel: Die __init__()
funksie word outomaties geroep elke keer as die klas gebruik word om 'n nuwe objek te skep.
Voorbeeld
Voeg die __init__()
funksie by die
Student
klas:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Wanneer jy die __init__()
funksie byvoeg, sal die kinderklas nie meer die ouer se __init__()
funksie erf nie.
Let wel: Die kind se __init__()
funksie ignoreer die oorerwing van die ouer se
__init__()
funksie.
Om die oorerwing van die ouer se __init__()
funksie te behou, voeg 'n oproep by die ouer se __init__()
funksie:
Voorbeeld
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Nou het ons die funksie __init__() suksesvol bygevoeg, en die oorerwing van die ouerklas behou, en ons is gereed om funksionaliteit in die
__init__()
funksie by te voeg.
Gebruik die super() funksie
Python het ook 'n super()
funksie wat die kinderklas al die metodes en eienskappe van sy ouer sal laat erf:
Voorbeeld
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Deur die super()
funksie te gebruik, hoef jy nie die naam van die ouerelement te gebruik nie, dit sal outomaties die metodes en eienskappe van sy ouer erf.
Voeg eienskappe by
Voorbeeld
Voeg 'n eienskap wat graduationyear
by die
Student
klas genoem word:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
In die voorbeeld hieronder moet die jaar 2019
'n veranderlike wees en in die
Student
klas deurgegee word wanneer studente-objekte geskep word. Om dit te doen, voeg nog 'n parameter in die __init__() funksie by:
Voorbeeld
Voeg 'n year
parameter by en slaag die korrekte jaar wanneer voorwerpe geskep word:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Voeg metodes by
Voorbeeld
Voeg 'n metode geroep welcome
by die
Student
klas:
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)
As jy 'n metode in die kinderklas byvoeg met dieselfde naam as 'n funksie in die ouerklas, sal die oorerwing van die ouermetode oorheers word.