Wprowadzenie do dziedziczenia w Pythonie

Python, który oferuje wiele paradygmatów, oczywiście dostosowuje się do obiektowego stylu programowania. I żaden język nie może być na tyle niedorzeczny, by domagać się metodologii obiektowej bez zapewnienia wsparcia dla dziedziczenia, w tym python. Python zapewnia wyraźnie unikalny smak dziedziczenia, umożliwiając niezwykle potężne operacje, których wcześniej nie widziano. Chociaż wiąże się to z pewnymi ograniczeniami, na przykład obecnie bezpieczeństwo poprzez zakres dla członków klasy jest osiągane tylko na podstawie konwencji i nie jest z natury częścią języka. Dlatego członkowie zadeklarowani jako prywatni są w rzeczywistości publicznie dostępni z pewnymi modyfikacjami.

Składnia klasy

Składnia definiująca klasę pochodną, ​​gdy ma zostać odziedziczona jedna lub więcej klas podstawowych, jest następująca:

class derivedClassName(baseClassName(, …)):


Jak pokazano, klasa pochodna określa rozdzieloną przecinkami listę klas podstawowych, z których mają być dziedziczone nagłówki definicji klas.

Kuchnia klasowa

Zacznijmy od zdefiniowania klasy podstawowej stosowanej we wszystkich naszych przykładach:

class cuisine():
def __init__(self, type):
self.type = type
returncooked_cuisine = new cuisine('cooked')

Przedstawiona baza definiuje szablon obiektu używany do definiowania kuchni i rejestrowania, czy jest to kuchnia gotowana, czy nie. Ma też konstruktora używanego do akceptowania rodzaju kuchni. Później tworzony jest obiekt typu „gotowany”.

Rodzaje dziedziczenia w Pythonie

Istnieją głównie dwa rodzaje dziedziczenia, których kombinacja daje każdy inny rodzaj dziedziczenia.

1. Pojedyncze dziedziczenie: jedna klasa podstawowa, odziedziczona przez jedną klasę pochodną. To najprostszy rodzaj dziedziczenia. Również minimalny możliwy. Klasa pochodna automatycznie wywołuje konstruktora klasy podstawowej.

2. Wielokrotne dziedziczenie: wiele klas podstawowych dziedziczonych przez jedną klasę pochodną. Konstruktory klas bazowych są wywoływane w kolejności, w jakiej klasy zostały wyprowadzone.

Pochodne typy dziedziczenia

Połączenie powyższych dwóch form dziedziczenia może prowadzić do następujących rodzajów dziedziczenia:

1. Dziedziczenie hierarchiczne: jedna klasa podstawowa dziedziczona przez wiele klas pochodnych. Każda klasa pochodna będzie działać niezależnie, ale obiekty dzielą zmienne klasowe w różnych klasach.

2. Dziedziczenie wielopoziomowe: klasa pochodna służąca jako klasa podstawowa dla innej klasy pochodnej. W tym przypadku konstruktory klasy podstawowej są wywoływane rekurencyjnie.

3. Dziedziczenie hybrydowe: Kombinacja wielu instancji wyżej wymienionych rodzajów dziedziczenia. Może to prowadzić do dowolnej możliwej kombinacji klas.

Przykłady dziedziczenia w Pythonie

Poniżej znajdują się przykłady dziedziczenia w Pythonie:

1. Pojedyncze dziedzictwo

Stwórzmy klasę o nazwie Kuchnia Indyjska, która dziedziczy kuchnię klasową.

class indian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnindian_cuisine = new cuisine('cooked', 'India')

Jak pokazano w nowej klasie, utworzono indian_cusine, która przyjmuje parametr type i wywołuje konstruktor klasy podstawowej, przekazując parametr. Dodatkowo tworzy nowe miejsce zmiennej obiektu . Jest to używane tylko w klasie pochodnej i nie jest widoczne dla obiektów klasy podstawowej.

2. Dziedziczenie hierarchiczne

Stwórzmy klasę o nazwie ItalianCuisine, która dziedziczy klasową kuchnię:

class italian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnitalian_cuisine = new cuisine('cooked', 'Italy')

Jak pokazano w nowej klasie, utworzono model Italian_cusine, który przyjmuje parametr type i wywołuje konstruktor klasy podstawowej, przekazując parametr. Dodatkowo tworzy nowe miejsce zmiennej obiektu . Jest to używane tylko w klasie pochodnej i nie jest widoczne dla obiektów klasy podstawowej. Teraz, ponieważ dwie klasy, indian_cusines i italian_cuisine dziedziczą klasę kuchni, zaimplementowano hierarchiczne dziedziczenie.

3. Wielokrotne dziedziczenie

Stwórzmy klasę o nazwie FineDineCuisine, która dziedziczy z wielu klas.

class fine_dine_cuisine(indian_cuisine, italian_cuisine):
def __init__(self, type, place, portion_size):
super().__init__(type, place)
self.portion_size = portion_size
returnfine_dine_cuisine = new cuisine('cooked', 'India', 4)

Nowa klasa fine_dine_cuisine, dziedziczy po indian_cuisine i italian_cuisine, dziedzicząc ich parametry. Przyjmuje typ parametru, miejsce i rozmiar_ porcji. typ i miejsce są przekazywane jako argumenty dla konstruktorów klasy podstawowej. rozmiar_ porcji to nowy parametr obiektu, który nie jest udostępniany klasom podstawowym.

Uwaga na temat dziedziczenia diamentów:

Ponieważ zarówno indian_cuisine, jak i italian_cuisine dziedziczą z klasy kuchni, tworzy klasyczny przypadek dziedziczenia diamentów, w którym wiele wystąpień klasy podstawowej jest bezpośrednio / pośrednio obecnych dla klasy pochodnej. W większości języków, takich jak c ++, powoduje to problem lub stosuje się klasy abstrakcyjne. Z drugiej strony Python określa własne innowacyjne rozwiązanie. Dziedziczy wspólne metody i atrybuty tylko raz, dając pierwszeństwo klasom w kolejności dziedziczenia. Tak więc tutaj, ponieważ kuchnia jest dziedziczona dwukrotnie, preferowana jest wersja kuchni indian_cuisine, ponieważ jest ona dziedziczona jako pierwsza.

Uwaga na temat członków klasy:

Każdy atrybut zdefiniowany w definicji klasy, ale nie w ramach funkcji, staje się atrybutem klasy i jest współdzielony we wszystkich instancjach klasy. Zatem jeśli jeden obiekt zmieni którykolwiek z tych atrybutów klasy, zmiany będą widoczne dla wszystkich innych instancji (zarówno dla tego samego obiektu klasy, jak i pochodnego obiektu klasy). Dlatego należy zachować ostrożność, używając atrybutów klas nieobecnych w żadnej definicji metody.

Wniosek - Dziedziczenie w Pythonie

Python po raz kolejny zdefiniował bardzo elastyczny, dostosowany i wydajny w użyciu, gdy preferowanym sposobem jest obiektowy paradygmat. Jest to zdecydowanie koncepcja, z której każdy może korzystać i powinna mieć pod nią pas. Te koncepcje są wykorzystywane do tworzenia elementów składowych każdego skalowalnego i łatwego do utrzymania oprogramowania.
Dzięki temu podstawowemu wprowadzeniu do dziedziczenia w pythonie możesz kierować się rzeczywistymi stwierdzeniami problemów i sprawdzać, jak dobry jest projekt.

Polecane artykuły

Jest to przewodnik po dziedziczeniu w Pythonie. Tutaj omawiamy wprowadzenie, składnię i typy dziedziczenia w Pythonie wraz z różnymi przykładami i implementacją kodu. Możesz także przejrzeć nasze inne sugerowane artykuły -

    1. Dziedziczenie w Javie
    2. Co to jest dziedziczenie w programowaniu?
    3. Dziedziczenie w C #
    4. Przesłanianie w Javie
    5. Dziedziczenie w PHP
    6. Deklarowanie klasy abstrakcyjnej w C # z przykładem