Introduktion til arv i Python

Python, der kan prale af multi-paradigmefunktioner, imødekommer naturligvis den objektorienterede programmeringsstil. Og ethvert sprog kan ikke være latterligt nok til at hævde objektorienteret metode uden at yde støtte til arv, inklusive python. Python giver en markant unik aroma, som muliggør ekstremt kraftfulde operationer, der ikke er set før. Selvom det har nogle begrænsninger, for for eksempel opnås i øjeblikket sikkerhed gennem rækkevidde for klassemedlemmer ved konvention og er ikke i sig selv en del af sproget. Således er medlemmer, der er erklæret som private, faktisk tilgængelige offentligt med nogle ændringer.

Klasse syntaks

Syntaks for at definere en afledt klasse, når en eller flere baseklasser skal arves, er som følger:

class derivedClassName(baseClassName(, …)):


Som vist specificerer den afledte klasse en kommasepareret liste over baseklasser at arve fra i klassedefinitionshovedet.

Klassekøkken

Lad os starte med at definere en baseklasse, der bruges til alle vores eksempler:

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

Den viste base definerer en objektskabelon, der bruges til at definere køkkener og fange, om det er et kogt køkken eller ej. Det har også en konstruktør, der bruges til at acceptere den type køkken. Senere oprettes et objekt af typen 'kogt'.

Arvstyper i Python

Der er hovedsageligt to typer arv, hvoraf en kombination giver enhver anden type.

1. Enkelt arv: En baseklasse, arvet af en afledt klasse. Dette er den enkleste arvtype. Også den minimale mulige. Den afledte klasse påkalder automatisk baseklasse-konstruktøren.

2. Multiple arv: Flere baseklasser arvet af en afledt klasse. Grundklasse-konstruktører påberåbes i den rækkefølge, i hvilke klasser blev afledt.

Afledte arvstyper

Kombination af ovennævnte to former for arv kan føre til følgende arvetyper:

1. Hierarkisk arv: En baseklasse arvet af flere afledte klasser. Hver afledte klasse fungerer uafhængigt, men objekter deler klassevariablerne på tværs af forskellige klasser.

2. Erfarenhed på flere niveauer: En afledt klasse, der tjener som en baseklasse for en anden afledt klasse. Grundklasse-konstruktører påberåbes rekursivt i dette tilfælde.

3. Hybridarv: En kombination af flere forekomster af de ovennævnte arvetyper. Dette kan føre til enhver tænkelig kombination af klasser.

Eksempler på arv i Python

Nedenfor er eksempler på arv i Python:

1. Enkelt arv

Lad os oprette en klasse kaldet indisk køkken, der arver klassekøkken.

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

Som vist i en ny klasse blev indian_cusine oprettet, der accepterer type-parameter og påkalder en baseklasse-konstruktør, der passerer parameteren. Det opretter desuden et nyt objektvariabelt sted . Dette bruges kun i den afledte klasse og er ikke synlig for basisklasseobjekter.

2. Hierarkisk arv

Lad os oprette en klasse kaldet ItalianCuisine, der arver klassekøkken:

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

Som vist i en ny klasse blev Italian_cusine oprettet, som accepterer type-parameter og påkalder en baseklasse-konstruktør, der passerer parameteren. Det opretter desuden et nyt objektvariabelt sted . Dette bruges kun i den afledte klasse og er ikke synlig for basisklasseobjekter. Nu, da to klasser, indiske_kusiner og italiensk_cuisine arver køkkenklasse, er der en hierarkisk arv implementeret.

3. Multiple arv

Lad os oprette en klasse kaldet FineDineCuisine, der arver fra flere klasser.

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)

Den nye klasse fine_dine_cuisine, arver både indiancuisine og italian_cuisine, og arver deres parametre. Det accepterer parametrene type, sted og portion_størrelse. type og sted videresendes som argumenter for baseklasse-konstruktører. portion_size er en ny objektparameter, der ikke deles til baseklasser.

Bemærk om diamantarv:

Da både indiancuisine og italian_cuisine arver fra køkkenklasse, danner det et klassisk tilfælde af diamantarv, hvor flere forekomster af en baseklasse er direkte / indirekte til stede for en afledt klasse. På de fleste sprog, som c ++, forårsager dette et problem, eller abstrakte klasser bruges. Python på den anden side specificerer sin egen innovative løsning. Det arver de almindelige metoder og attributter kun når det foretrækker klasser i rækkefølgen af ​​arv. Da køkken er arvet to gange, gives der derfor indiske_cuisine version af køkken, da det er arvet først.

Bemærk om klassemedlemmer:

Enhver attribut, der er defineret i klassedefinitionen, men ikke inden for en funktion, bliver en klasseattribut og deles på tværs af alle forekomster af klassen. Så hvis et objekt ændrer nogen af ​​disse klasseattributter, er ændringerne synlige for alle andre tilfælde (hvad enten det gælder det samme klasseobjekt eller det afledte klasseobjekt). Vær derfor forsigtig, mens du bruger klasseattributter, der ikke findes i nogen metodedefinition.

Konklusion - Arv i Python

Python har igen defineret en meget fleksibel, imødekommende og kraftfuld at bruge, når det objektorienterede paradigme er den foretrukne rute. Det er bestemt et koncept, som alle kan bruge og burde have et bælte dernede. Disse koncepter bruges til at danne byggestenene til ethvert skalerbart og vedligeholdeligt stykke software.
Med denne grundlæggende introduktion til arv i python kan du gå foran og målrette virkelighedens problemudsagn og se, hvor godt et design du er i stand til at tænke på.

Anbefalede artikler

Dette er en guide til arv i Python. Her diskuterer vi introduktion, syntaks og arvstyper i Python sammen med forskellige eksempler og dens implementering af kode. Du kan også gennemgå vores andre foreslåede artikler -

    1. Arv i Java
    2. Hvad er arv i programmering?
    3. Arv i C #
    4. Overstyring i Java
    5. Arv i PHP
    6. At erklære abstrakt klasse i C # med eksempel

Kategori: