1 2 | class Pochodna(Bazowa): pass |
Klasa bazowa nazywana jest parent, superclass, base class.
Klasa pochodnia nazywana jest subclass, derived.
Przykład, na bazie klasy Czlowiek, tworzone są dwie klasy pochodne Dorosly i Dziecko:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Czlowiek: def __init__(self,imie,nazwisko): self.imie=imie self.nazwisko= nazwisko class Dorosly(Czlowiek): pass class Dziecko(Czlowiek): pass osoba1=Dorosly("Zenon","Domyslny") osoba2=Dziecko("Zenonek","Niedomyślny") print(osoba1.imie) print(osoba2.nazwisko) |
Zenon
Niedomyślny
klasy Dorosly i Dziecko dziedziczą z superklasy w całości metodę __init__ i nie mają swoich metod.
Nadpisywanie metod klasy bazowej
W klasie pochodnej Dorosly, możemy nadpisać metodę __init__.
Jak widać nowa metoda ma dodany atrybut 'pseudonim'.
Żeby się nie powtarzać przypisanie zmiennych imię i nazwisko możemy skopiować z superklasy za pomocą polecenia:
super().__init__(imie,nazwisko)
Przykład:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Czlowiek: def __init__(self,imie,nazwisko): self.imie=imie self.nazwisko= nazwisko class Dorosly(Czlowiek): def __init__(self,imie,nazwisko,pseudonim): super().__init__(imie,nazwisko) self.pseudonim=pseudonim osoba1=Dorosly("Zenon","Domyslny","Banita") print(osoba1.pseudonim) |
nadpisywać i wywoływać przez super można metody, ale nie specjalne.
Mamy możliwość dziedziczenia z typów wbudowanych, jak lista słownik itp.
Na bazie list stwórzmy własną klasę i dodajmy jej metodę znajdującą średnią:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class MojaLista(list): def srednia(self): wynik=sum(self) wynik=wynik/len(self) return wynik x=MojaLista( ) x.append(1) x.append(2) x.append(3) print(x.srednia()) |
wynik:
2
Argument funkcji *args
Służy do przekazywania dowolnej liczby nie nazwanych parametrów do funkcji.
1 2 3 4 5 6 7 | def too ( arg1 , arg2 ,*argv ): print ( "normalne argumenty:" , arg1 ) for arg in argv : print ( "parametr *argv :" , arg ) print ( "normalne argumenty:" , arg2 ) too("Dzień", "Jak", 1,2,3,4,"Codzień" ) |
Wynik:
normalne argumenty: Dzień
parametr *argv : 1
parametr *argv : 2
parametr *argv : 3
parametr *argv : 4
parametr *argv : Codzień
normalne argumenty: Jak
Dziedziczenie wielobazowe
Jest możliwe dziedziczenie jednoczesne z dwóch klas:
1 | class Jakas(Domek,Mieszkanie) : |
Agregacja
Nowa klasa powstaje przez użycie obiektów klas już istniejących.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Reka: def __init__(self,ktora): self.ktora=ktora class Noga: def __init__(self,ktora): self.ktora=ktora class CialoSamo: def __init__ (self): self.lewa_reka=Reka("LEWA" ) self.prawa_reka=Reka("PRAWA" ) self.lewa_noga=Noga("LEWA" ) self.prawa_noga=Noga("PRAWA" ) cialo = CialoSamo ( ) print(cialo.lewa_reka.ktora) |
LEWA
Obiekt ciało składa się z argumentów które w rzeczywistości są obiektami klas Reka i Noga.
.