Dziedziczenie Pythona

Dziedziczenie Pythona

Wstęp

Dziedziczenie to kolejna kluczowa koncepcja w programowaniu zorientowanym na obiekt i odgrywa istotną rolę w klasach budowania. Pozwala klasie opierać się na istniejącym.

Kiedy po raz pierwszy zacząłeś pisać zajęcia z Pythona, powiedziano ci, aby po prostu umieścić „obiekt” w nawiasach definicji klasy i nie myśleć o tym. Cóż, nadszedł czas, aby o tym myśleć.

„Obiekt” jest w rzeczywistości klasą podstawową, z której dziedziczą wszystkie klasy Pythona. Definiuje podstawowy zestaw funkcjonalności, który powinny mieć wszystkie klasy Pythona. Dziedzicząc po nim podczas tworzenia nowej klasy, upewnij się, że ta klasa ma tę podstawową funkcjonalność.

Krótko mówiąc, dziedzictwo jest dobrym sposobem na kategoryzację zajęć i upewnienie się, że nie trzeba się powtarzać.

Co to jest dziedzictwo?

Dziedzictwo istnieje również w prawdziwym świecie. Pierwsze kilka przewodników wykorzystało samochód jako przykład klasy. Cóż, co jeśli chcesz bardziej określonych rodzajów samochodów, które wszystkie podzielą te podstawowe zasady samochodu? Dziedziczenie może pomóc.

Możesz zacząć od podstawowej klasy „samochodu”, która ma wszystkie właściwości, które każdy samochód dzieli. Wszystkie byłyby bardzo ogólne.

Po uzyskaniu „samochodu” możesz tworzyć nowe zajęcia i przekazać je „samochód.„Wszyscy będą mieli takie same właściwości, jak podstawowa klasa„ samochodu ”. Następnie możesz dodać dowolne dodatkowe właściwości, które chcesz do tych bardziej wyspecjalizowanych klas. Na przykład możesz mieć zajęcia „ciężarówka”, „samochód mięśniowy” i „SUV”, które wszystkie dziedziczą po „Car."

Kiedy myślisz o tym w realnym świecie, ciężarówki, samochody mięśniowe i SUV -y mają te same podstawowe właściwości jak każdy inny samochód, ale mają też wyspecjalizowane nieruchomości.

Możesz także specjalizować się. Istnieje mnóstwo różnych rodzajów ciężarówek. Możesz więc stworzyć bardziej wyspecjalizowane zajęcia, które dziedziczą po „ciężarówce.„Wszystko zacznie się od wszystkiego„ samochodu ”i wszystkiego, od„ ciężarówki."

Korzystanie z dziedzictwa w Pythonie

W porządku, więc teraz możesz to wypróbować za pomocą prawdziwego kodu. Skonfiguruj podstawową klasę „samochodu”, która dziedziczy po „obiekt.„Spróbuj pracować z poniższym przykładem.

Class Car (Object): def __init __ (self, make = 'ford', model = 'pinto', rok = '1971', przebieg = 253812, color = 'Orange'): self.__make = sam siebie.__model = model samego.__year = rok.__mileage = jaźń przebieg.__color = Color def Movem_Forward (Self, Speed): Print („Twój %s idzie naprzód w %s” %(jaźń.__Model, prędkość)) def Movem_backward (self, prędkość): drukuj („przesuwa się wstecz w % s” % prędkość) klasa MuscleCar (samochód): __HP = 300 def set_hp (self, hp): self): self): self): self self.__HP = hp def get_hp (self): powrót siebie.__HP def drag_race (self, przeciwnik): if (self.__HP> przeciwnik.get_hp ()): powrót „wygrywasz!„Else: powrót” przegrywasz!„MyNewCar = MuscleCar („ Ford ”,„ Mustang ”,„ 2016 ”, 3000,„ czerwony ”) MyNewcar.set_hp (687) przeciwnik = MuscleCar („ford”, „Mustang”, „2014”, 6400, „zielony”) przeciwnik.set_hp (465) MyNewcar.Drukuj much_forward („25 km / h” (MyNewcar.Drag_RACE (przeciwnik)) 

Zauważ, że MUSCLECAR obiekty były w stanie użyć konstruktora i pójść naprzód Metoda z klasy „samochodowych”, mimo że klasa, z której się utworzyli, nie ma wyraźnie.

Nadrzędny

Tylko dlatego, że klasa dziedziczy po innej, nie utknąłeś ze całą funkcjonalnością klasy nadrzędnej. Możesz zastąpić części klasy nadrzędnej w klasach dzieci. Zmiany zastosowane w klasie dziecka nie będą miały zastosowania do pierwotnej klasy nadrzędnej, więc nie musisz się martwić o zepsucie innych zajęć.

W powyższym przykładzie „MastleCar” miał właśnie zmienną, __HP Po prostu unosi się tam bez możliwości ustawienia go na instancję. Sprawdź ten sam przykład, ale z zastrzeżeniem konstruktora.

Class Car (Object): def __init __ (self, make = 'ford', model = 'pinto', rok = '1971', przebieg = 253812, color = 'Orange'): self.__make = sam siebie.__model = model samego.__year = rok.__mileage = jaźń przebieg.__color = Color def Movem_Forward (Self, Speed): Print („Twój %s idzie naprzód w %s” %(jaźń.__model, prędkość)) def Move_backward (self, prędkość): Drukuj („Cofnij się do tyłu w % s” % prędkość) klasa MUSCLECAR (CAR): def __init __ (self, make = 'ford', model = „Mustang”, rok = „1965”, przebieg = 54032, kolor = „niebieski”, HP = 325): jaźń.__make = sam siebie.__model = model samego.__year = rok.__mileage = jaźń przebieg.__color = kolorowy self.__HP = hp def set_hp (self, hp): self.__HP = hp def get_hp (self): powrót siebie.__HP def drag_race (self, przeciwnik): if (self.__HP> przeciwnik.get_hp ()): powrót „wygrywasz!„Else: powrót” przegrywasz!„MyNewCar = MuscleCar („ Ford ”,„ Mustang ”,„ 2016 ”, 3000,„ czerwony ”, 687) przeciwnik = MuscleCar () MyNewcar.Drukuj much_forward („25 km / h” (MyNewcar.Drag_RACE (przeciwnik)) 

Są dwie rzeczy do zauważenia. Pierwszy, __HP stał się samego siebie.__HP i jest włączony do konstruktora. Z tego powodu ustawienie jest o wiele łatwiejsze. Po drugie, domyślne wartości dla nowego „MUSCLECAR” zostały zmienione. Pinto nie jest bardzo dobrym domyślnym samochodem mięśniowym, czy to?

Możesz to zrobić za pomocą dowolnej zmiennej lub metody w podklasie lub klasie dzieci. Dodaje dodatkowy stopień elastyczności i uniemożliwia zablokowanie się w funkcjonalności rodzica lub super klasy.

Super metoda

Czasami musisz uzyskać dostęp do metod znalezionych w klasie nadrzędnej z klasy dzieci. Weź poprzedni przykład, który zastępuje ten konstruktor. Wiele z tego kodu jest zbędne. Za pomocą Super() Aby wywołać konstruktor z klasy „Car”, eliminuje tę redundancję i stanowi bardziej usprawnioną klasę.

Super() może być również używane do dostępu do zwykłych metod stosowania w metodach podklasowych. Poniższy przykład używany Super() w obie strony.

Class Car (Object): def __init __ (self, make = 'ford', model = 'pinto', rok = '1971', przebieg = 253812, color = 'Orange'): self.__make = sam siebie.__model = model samego.__year = rok.__mileage = jaźń przebieg.__color = Color def set_make (self, make): self.__make = uczyń def get_make (self): powrót siebie.__make def set_model (self, model): self.__model = model def get_model (self): powrót siebie.__Model def set_year (ja, rok): jaźń.__year = rok def get_year (self): powrót siebie.__year def set_mileage (self, przebieg): jaźń.__mileage = przebieg def get_mileage (self): powrót siebie.__mileage def set_color (self, kolor): self.__color = kolor def get_color (self): powrót siebie.__color def Mov_Forward (Self, Speed): Drukuj („Twój %s idzie naprzód w %s” %(jaźń.__model, prędkość)) def Move_backward (self, prędkość): Drukuj („Cofnij się do wstecz w % s” % prędkość) klasa MuscleCar (CAR): def __init __ (self, make = 'ford', model = 'Mustang', rok = „1965”, przebieg = 54032, Color = „Blue”, HP = 325): super ().__init __ (make, model, rok, przebieg, kolor) jaźń.__HP = hp def set_hp (self, hp): self.__HP = hp def get_hp (self): powrót siebie.__HP def drag_race (self, przeciwnik): if (self.__HP> przeciwnik.get_hp ()): powrót „wygrywasz!„Else: powrót” przegrywasz!„def Trade_up (self, rok, kolor): super ().set_year (rok) super ().set_color (kolor) super ().set_mileage (0) MyNewCar = MuscleCar („ford”, „Mustang”, „2016”, 3000, „czerwony”, 687) przeciwnik = MuscleCar () MyNewcar.Drukuj much_forward („25 km / h” (MyNewcar.Drag_RACE (przeciwnik)) MyNewcar.Trade_up („2017”, „czarny”).get_year (), MyNewcar.get_color (), MyNewcar.get_mileage ())) 

Spójrz na sposób, w jaki handlu górę Metoda używa Super() Aby uzyskać dostęp i wywołać te metody setter z klasy nadrzędnej.

Zamykanie myśli

Dziedziczenie pozwala używać klas jako szablonów dla bardziej wyspecjalizowanych klas. Możesz budować zajęcia w takiej strukturze, że zaczynają przypominać drzewo genealogiczne, z „starszymi” i bardziej ogólnymi członkami przekazującymi cechy „młodszych” bardziej wyspecjalizowanych członków.

Wiele programów zorientowanych na obiekty zmniejsza ilość kodu pisanego i zapobiega przepisywaniu jak największej ilości kodu. Dziedzictwo pełni dużą rolę w umożliwieniu tego.

Ćwiczenia

  1. Utwórz podstawową klasę, która dziedziczy po klasie „samochodu”.
  2. Utwórz nową klasę i zadzwoń jedną z metod „samochodu."
  3. Utwórz nowe metody w klasie dziecka.
  4. Zadzwoń do nowej metody.
  5. Używać Super() Aby dodać zmienne do konstruktora klasy dziecka.
  6. Utwórz metodę za pomocą Super() Aby uzyskać dostęp do metod klasy nadrzędnej.
  7. Zadzwoń do nowej metody, która używa Super().

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Rzeczy do zainstalowania na Ubuntu 22.04
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
  • Ubuntu 20.04 Przewodnik
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…
  • Jak podwójnie rozruch Kali Linux i Windows 10
  • Jak zbudować aplikację Tkinter za pomocą obiektu zorientowanego na…
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?