Dziedziczenie Pythona
Dziedziczenie Pythona
Dziedziczenie pozwala nam zdefiniować klasę, która dziedziczy wszystkie metody i właściwości z innej klasy.
Klasa nadrzędna to klasa, z której dziedziczymy, nazywana również klasą bazową.
Klasa potomna to klasa, która dziedziczy z innej klasy, zwanej również klasą pochodną.
Utwórz klasę rodzicielską
Każda klasa może być klasą nadrzędną, więc składnia jest taka sama jak przy tworzeniu dowolnej innej klasy:
Przykład
Utwórz klasę o nazwie Person
, with
firstname
i lastname
properties oraz printname
metodę:
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()
Utwórz klasę podrzędną
Aby stworzyć klasę, która dziedziczy funkcjonalność z innej klasy, wyślij klasę nadrzędną jako parametr podczas tworzenia klasy potomnej:
Przykład
Utwórz klasę o nazwie Student
, która odziedziczy właściwości i metody z Person
klasy:
class Student(Person):
pass
Uwaga: Użyj pass
słowa kluczowego, jeśli nie chcesz dodawać do klasy żadnych innych właściwości ani metod.
Teraz klasa Student ma te same właściwości i metody, co klasa Person.
Przykład
Użyj Student
klasy, aby utworzyć obiekt, a następnie wykonaj printname
metodę:
x = Student("Mike", "Olsen")
x.printname()
Dodaj funkcję __init__()
Do tej pory stworzyliśmy klasę potomną, która dziedziczy właściwości i metody od swojego rodzica.
Chcemy dodać __init__()
funkcję do klasy potomnej (zamiast pass
słowa kluczowego).
Uwaga: Funkcja __init__()
jest wywoływana automatycznie za każdym razem, gdy klasa jest używana do tworzenia nowego obiektu.
Przykład
Dodaj __init__()
funkcję do
Student
klasy:
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Po dodaniu __init__()
funkcji klasa potomna nie będzie już dziedziczyć funkcji rodzica __init__()
.
Uwaga:__init__()
Funkcja dziecka zastępuje dziedziczenie funkcji rodzica
__init__()
.
Aby zachować dziedziczenie funkcji rodzica __init__()
, dodaj wywołanie funkcji rodzica __init__()
:
Przykład
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Teraz pomyślnie dodaliśmy funkcję __init__(), zachowaliśmy dziedziczenie klasy nadrzędnej i jesteśmy gotowi do dodania funkcji w tej
__init__()
funkcji.
Użyj funkcji super()
Python posiada również super()
funkcję, która sprawi, że klasa potomna odziedziczy wszystkie metody i właściwości od swojego rodzica:
Przykład
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Korzystając z super()
funkcji, nie musisz używać nazwy elementu rodzica, automatycznie odziedziczy on metody i właściwości po swoim rodzicu.
Dodaj właściwości
Przykład
Dodaj właściwość wywoływaną graduationyear
do
Student
klasy:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
W poniższym przykładzie rok 2019
powinien być zmienną i przekazywany do
Student
klasy podczas tworzenia obiektów studenckich. Aby to zrobić, dodaj kolejny parametr w funkcji __init__():
Przykład
Dodaj year
parametr i podaj poprawny rok podczas tworzenia obiektów:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Dodaj metody
Przykład
Dodaj metodę wywoływaną welcome
do
Student
klasy:
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)
Jeśli dodasz metodę w klasie podrzędnej o tej samej nazwie co funkcja w klasie nadrzędnej, dziedziczenie metody nadrzędnej zostanie nadpisane.