Rodzaje dziedziczenia w Pythonie | Dziedziczenie Pythona [z przykładem]
Opublikowany: 2021-02-09Spis treści
Wstęp
Walka o czysty kod to bitwa, w której biorą udział wszyscy programiści. I tę bitwę można pokonać za pomocą odpowiedniego pancerza koncepcji programowania obiektowego. Właściwe wykorzystanie koncepcji OOP pomaga nam poprawić ponownie użyteczność kodu, czytelność, optymalną złożoność czasową i przestrzenną.
Kodowanie w Pythonie to świetna zabawa. Ma ogromną liczbę obsługiwanych bibliotek, zorientowaną obiektowo programowalność GUI sprawia, że jest to gorące ciasto wśród wszystkich języków programowania.
Dziedziczenie jest jedną z najczęściej wykorzystywanych funkcji obiektowych, a implementacja go w Pythonie jest entuzjastycznym zadaniem. Więc zacznijmy teraz!
Najpierw zrozummy definicję dziedziczenia.
Dziedzictwo
Dziedziczenie to proces uzyskiwania właściwości i cech (zmiennych i metod) innej klasy. W tym porządku hierarchicznym klasa, która dziedziczy inną klasę, nazywana jest podklasą lub klasą potomną, a druga klasa jest klasą nadrzędną.
Dziedziczenie jest kategoryzowane na podstawie stosowanej hierarchii oraz liczby zaangażowanych klas nadrzędnych i podklas.
Istnieje pięć rodzajów dziedziczenia:
- Pojedyncze dziedziczenie
- Dziedziczenie wielokrotne
- Dziedziczenie wielopoziomowe
- Dziedziczenie hierarchiczne
- Dziedziczenie hybrydowe
Pojedyncze dziedziczenie
Ten typ dziedziczenia umożliwia podklasie lub klasie pochodnej dziedziczenie właściwości i cech klasy nadrzędnej, co pozwala uniknąć powielania kodu i poprawia możliwość ponownego wykorzystania kodu.
#klasa rodzicielska klasa Powyżej : ja = 5 def fun1 (własny): print( „Hej, jesteś w klasie rodzicielskiej” ) #podklasa klasa poniżej (powyżej): i= 10 def fun2 (własna): print( „Hej, jesteś w podklasie” ) temp1=Poniżej() temp2=Powyżej() temp1.zabawa1() temp1.zabawa2() temp2.zabawa1() drukuj(temp1.i) drukuj(temp2.i) #temp2.zabawa2() |
W porządku, przejdźmy przez powyższy kod.
W powyższym kodzie „Powyżej” jest klasą nadrzędną, a „Poniżej” jest klasą potomną, która dziedziczy klasę nadrzędną. Implementacja dziedziczenia w pythonie jest prostym zadaniem, wystarczy wspomnieć nazwę klasy nadrzędnej w nawiasach klasy potomnej. Tworzymy obiekty zarówno klasy rodzicielskiej, jak i klasy potomnej, a tu pojawia się ciekawa kwestia dotycząca dziedziczenia. Klasa potomna może uzyskać dostęp do metod i zmiennych klasy nadrzędnej, podczas gdy odwrotnie nie jest prawdą.
Zatem w powyższym kodzie obiekt temp1 może mieć dostęp zarówno do metody fun1 jak i fun2, podczas gdy obiekt temp2 ma dostęp tylko do metody fun1. Podobnie ta sama zasada dotyczy zmiennych w kodzie. A dostęp do metody lub zmiennej klasy podrzędnej z obiektu klasy nadrzędnej spowoduje zgłoszenie błędu. Jeśli ostatnia linia w kodzie jest odkomentowana, zgłasza błąd.
Dziedziczenie wielokrotne
To dziedziczenie umożliwia klasie podrzędnej dziedziczenie z więcej niż jednej klasy nadrzędnej. Ten typ dziedziczenia nie jest obsługiwany przez klasy java, ale python obsługuje ten rodzaj dziedziczenia. Ma to ogromną przewagę, jeśli musimy zebrać wiele cech z różnych klas.
#klasa rodzicielska 1 klasa A : demo1= 0 def fun1 (własny): print(self.demo1) #klasa rodzicielska 2 klasa B : demo2= 0 def fun2 (własna): print(self.demo2) #klasa dla dzieci klasa C (A, B): def fun3 (własny): print( „Cześć, jesteś w klasie dziecka” ) # Kod główny c = C() c.demo1 = 10 c.demo2 = 5 c.zabawa3() print( “pierwsza liczba to : “ ,c.demo1) print( “druga liczba to : “ ,c.demo2) |
W powyższym kodzie stworzyliśmy dwie klasy nadrzędne „A”, „B”. Podążając za składnią dziedziczenia w Pythonie, stworzyliśmy klasę potomną, która dziedziczy obie klasy „A” i „B”. Jak wspomniano wcześniej, klasa potomna może uzyskać dostęp do metod i zmiennych klasy nadrzędnej. Klasa potomna „C” może uzyskać dostęp do metod swojej klasy nadrzędnej.
Dziedziczenie wielopoziomowe
W dziedziczeniu wielopoziomowym przeniesienie właściwości cech odbywa się hierarchicznie do więcej niż jednej klasy. Aby uzyskać lepszą wizualizację, możemy uznać ją za relację od przodka do wnuków lub od korzenia do liścia na drzewie o więcej niż jednym poziomie.
#klasa rodzicielska 1 klasa pojazdu : def funkcjonujący (samo): print( „pojazdy służą do transportu” ) #dziecko klasa 1 samochód klasy (pojazd): def koła (własne): print( „samochód ma 4 koła” ) #dziecko klasa 2 klasa samochód_elektryczny (samochód): def specjalność (własna): print( „samochód elektryczny jeździ na prąd” ) elektryczny=samochód_elektryczny() elektryczna.specjalność() elektryczne.koła() elektryczne.funkcjonowanie() |
Po przetestowaniu powyższego kodu stworzyliśmy klasowy „pojazd”, a następnie stworzyliśmy klasowy samochód, który dziedziczy klasę pojazdu. Teraz „pojazd” jest klasą nadrzędną, a „samochód” jest klasą podrzędną. Później stworzyliśmy klasę „samochód_elektryczny”, teraz klasa samochód jest klasą nadrzędną, a klasa samochód_elektryczny jest klasą potomną, a relacja między klasą pojazd a klasą samochód_elektryczny jest dziedziczeniem wielopoziomowym.
Tutaj klasa samochód_elektryczny ma dostęp do metod, zmiennych zarówno klasy pojazdu, jak i samochodu, podczas gdy klasa samochód ma dostęp tylko do metod, zmiennych klasy pojazdu. Jak wspomniano, pojazd klasy nadrzędnej nie może uzyskać dostępu do żadnej metody klasy potomnej.
Dziedziczenie hierarchiczne
Dziedziczenie to pozwala klasie hostować jako klasę nadrzędną dla więcej niż jednej klasy lub podklasy podrzędnej. Zapewnia to zaletę współdzielenia funkcjonowania metod z wieloma klasami podrzędnymi, dzięki czemu unika się powielania kodu.
#klasa rodzicielska klasa rodzic : def fun1 (własny): print( „Hej, jesteś w klasie rodzicielskiej” ) #dziecko klasa 1 klasa dziecko1 (rodzic): def fun2 (własna): print( „Hej, jesteś w klasie dziecka 1” ) #dziecko klasa 2 klasa dziecko2 (rodzic): def fun3 (własny): print( „Hej, jesteś w klasie 2 dzieci” ) #dziecko klasa 3 klasa dziecko3 (rodzic): def fun4 (własny): print( „Hej, jesteś w klasie dziecka 3” ) # główny program dziecko_obj1 = dziecko3() dziecko_obj2 = dziecko2() child_obj3 = child1() child_obj1.fun1() child_obj1.fun4() child_obj2.fun1() child_obj2.fun3() child_obj3.fun1() child_obj3.fun2() |
W powyższym kodzie mamy pojedynczą klasę rodzica i wiele klas podrzędnych dziedziczących tę samą klasę rodzica. Teraz wszystkie klasy potomne mają dostęp do metod i zmiennych klasy nadrzędnej. Stworzyliśmy klasę „Parent” i 3 klasy potomne „child1”, „child2”, „child3”, które dziedziczą tę samą klasę rodzicielską „Parent”.
Zamówienie: pomysły na projekty Open Source w Pythonie
Dziedziczenie hybrydowe
Dziedziczenie to dziedziczenie hybrydowe, jeśli w tym samym kodzie zaimplementowano więcej niż jeden typ dziedziczenia. Ta funkcja umożliwia użytkownikowi najlepsze wykorzystanie funkcji dziedziczenia. Spełnia to wymóg implementacji kodu, który wymaga wielu dziedziczeń w implementacji.
klasa A: def fun1(self): print(„Hej, jesteś w klasie A”) klasa B(A): def fun2(self): print(„Hej, jesteś w klasie B”)klasa C(A): def fun3(self): print(„Hej, jesteś w klasie C”)class D(C,A): #line 13 def fun4(self): print(„Hej, jesteś w klasie D”)#program główny ref = D() ref.zabawa4() ref.zabawa3() ref.zabawa1() |
W powyższym kodzie widzimy, że zaimplementowaliśmy więcej niż jeden rodzaj dziedziczenia. Klasy A, B, C implementują dziedziczenie hierarchiczne, a klasy A, C, D implementują dziedziczenie wielopoziomowe. Nie, te indywidualne dziedziczenia mają swoje indywidualne właściwości dostępu do metod i zmiennych klasy nadrzędnej. Warto też zwrócić uwagę.
Kiedy wdrażamy dziedziczenie wielopoziomowe, stosujemy składnię typu „child_class(parent_class1, parent_class2)”. Ale ta składnia zwróci błąd, jeśli „parent_class1” jest hierarchicznie powyżej „parent_class2”. Jeśli chcemy zaimplementować tę składnię, to „parent_class1” musi znajdować się na niższym poziomie hierarchii niż „parent_class2”. Na przykład w powyższym kodzie, jeśli wiersz 13 ma składnię klasy D(A, C), kod nie zadziała, ponieważ klasa C jest hierarchicznie niższa niż klasa A.
Ucz się kursów nauki o danych z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Przeczytaj: Pomysły i tematy dotyczące projektów w Pythonie
Wniosek
Przeanalizowaliśmy zastosowania i potrzeby dziedziczenia oraz zrozumieliśmy definicję dziedziczenia. Ponadto omówiliśmy rodzaje dziedziczenia i przeszliśmy przez kody implementacji i objaśnienia każdego typu dziedziczenia. Zrozumienie zasad dostępu do zmiennych i metod w różnych typach dziedziczenia.
Teraz, gdy wiesz już o różnych typach dziedziczenia w Pythonie, spróbuj je zaimplementować i wykorzystać w swoim kodzie. Spróbuj zoptymalizować swój kod z odpowiednim wykorzystaniem dziedziczenia.
Jeśli jesteś zainteresowany nauką o danych, sprawdź IIIT-B i upGrad's PG Diploma in Data Science, który jest stworzony dla pracujących profesjonalistów i oferuje ponad 10 studiów przypadków i projektów, praktyczne warsztaty praktyczne, mentoring z ekspertami z branży, 1- on-1 z mentorami branżowymi, ponad 400 godzin nauki i pomocy w pracy z najlepszymi firmami.
Jaka jest różnica między dziedziczeniem wielokrotnym a dziedziczeniem wielopoziomowym?
Wielu początkujących programistów często myli się między dziedziczeniem wielokrotnym a dziedziczeniem wielopoziomowym. Poniżej przedstawiono niektóre ze znaczących różnic między tymi dwoma rodzajami dziedziczenia.
Dziedziczenie wielokrotne —
1. Kiedy klasa potomna dziedziczy swoje właściwości i cechy z więcej niż jednej klasy bazowej, taki typ dziedziczenia nazywa się dziedziczeniem wielokrotnym.
2. Nie jest szeroko stosowany, ponieważ wielokrotne dziedziczenie może być dość skomplikowane do zrozumienia.
3. Ma tylko dwa poziomy klas: klasę podstawową i klasę pochodną.
Dziedziczenie wielopoziomowe
1. Dziedziczenie, w którym klasa potomna dziedziczy właściwości ze swojej klasy bazowej, która dalej dziedziczy właściwości z innej klasy bazowej, czyniąc z tej pierwszej klasy potomnej, jest znane jako Dziedziczenie wielopoziomowe.
2. To dziedzictwo służy wielkim celom i dlatego jest szeroko stosowane.
3. Ma co najmniej trzy poziomy klas: klasa podstawowa, klasa pośrednia i klasa pochodna.
Co rozumiesz na temat dziedziczenia hybrydowego?
Dziedziczenie hybrydowe to unikalny rodzaj dziedziczenia. Zamiast nowej koncepcji, jak sama nazwa wskazuje, jest to połączenie dwóch lub więcej rodzajów dziedziczenia. Na przykład klasa pokazująca dziedziczenie wielopoziomowe i wielopoziomowe jest przykładem dziedziczenia hybrydowego.
Co wiesz o modyfikatorach dostępu w Pythonie?
W Pythonie istnieją 3 rodzaje modyfikatorów dostępu, które wymieniono poniżej:
1. Modyfikator dostępu publicznego — członkowie Public klasy są dostępni z dowolnej części programu. W Pythonie, jeśli specyfikator dostępu do składowych danych lub funkcji składowych nie jest określony, to jest on domyślnie publiczny.
2. Modyfikator dostępu chronionego — jeśli element członkowski danych lub funkcja członkowska jest zdefiniowana jako chroniona, jest dostępna tylko dla klas pochodnych tej klasy.
3. Modyfikator dostępu prywatnego — modyfikator dostępu prywatnego jest najbezpieczniejszym specyfikatorem dostępu. Prywatni członkowie są dostępni tylko w klasie, w której są zdefiniowane.