Introduksjon til arv i Python

Python, som kan skryte av multi-paradigmefunksjoner, imøtekommer åpenbart den objektorienterte programmeringsstilen. Og ethvert språk kan ikke være latterlig nok til å kreve objektorientert metodikk uten å gi støtte til arv, inkludert python. Python gir en utpreget unik arvsmak, noe som muliggjør ekstremt kraftige operasjoner som ikke er sett før. Selv om det har noen begrensninger, for for øyeblikket oppnås for øyeblikket sikkerhet gjennom omfang for klassemedlemmer ved konvensjon, og er ikke iboende en del av språket. Dermed er medlemmer som er erklært som private faktisk tilgjengelige offentlig med noen modifikasjoner.

Klasse syntaks

Syntaksen for å definere en avledet klasse når en eller flere baseklasser skal arves, er som følger:

class derivedClassName(baseClassName(, …)):


Som vist spesifiserer den avledede klassen en kommaseparert liste over baseklasser å arve fra i klassedefinisjonshodet.

Klassekjøkken

La oss starte med å definere en baseklasse som brukes til alle eksemplene våre:

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

Basen som vises definerer en objektmal som brukes til å definere kjøkken og fange opp om det er et tilberedt kjøkken eller ikke. Den har også en konstruktør som brukes til å akseptere typen mat. Senere opprettes et objekt av typen 'kokt'.

Arvstyper i Python

Det er hovedsakelig to typer arv, hvor en kombinasjon gir annenhver type.

1. Enkeltarv: En baseklasse, arvet av en avledet klasse. Dette er den enkleste arven. Også den minimale mulige. Den avledede klassen påkaller automatisk baseklasse-konstruktøren.

2. Flere arv: Flere baseklasser arvet av en avledet klasse. Baseklasse-konstruktører påberopes i den rekkefølgen klasser ble avledet.

Avledede typer arv

Å kombinere de to arvformene ovenfor kan føre til følgende arvetyper:

1. Hierarkisk arv: En baseklasse arvet av flere avledede klasser. Hver avledede klasse vil fungere uavhengig, men objekter deler klassevariablene på tvers av forskjellige klasser.

2. Arving på flere nivåer: En avledet klasse som fungerer som en baseklasse for en annen avledet klasse. Baseklasse-konstruktører påberopes rekursivt i dette tilfellet.

3. Hybrid arvelighet: En kombinasjon av flere forekomster av de ovennevnte arvelighetstypene. Dette kan føre til enhver tenkelig kombinasjon av klasser.

Eksempler på arv i Python

Nedenfor er eksempler på arv i Python:

1. Enkeltarv

La oss lage en klasse som heter Indian Cuisine som arver klassekjøkkenet.

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 ble indian_cusine opprettet som godtar type-parameter og påkaller en baseklasse-konstruktør som passerer parameteren. Det oppretter i tillegg et nytt objektvariabelt sted . Dette brukes bare i den avledede klassen og er ikke synlig for baseklasseobjekter.

2. Hierarkisk arv

La oss lage en klasse kalt ItalianCuisine som arver klassekjøkkenet:

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 ble italian_cusine opprettet som godtar type parameter og påkaller en baseklasse konstruktør, som passerer parameteren. Det oppretter i tillegg et nytt objektvariabelt sted . Dette brukes bare i den avledede klassen og er ikke synlig for baseklasseobjekter. Nå, siden to klasser, indiske_kusiner og italiensk_cuisine arver kjøkkenklasse, er det en hierarkisk arv implementert.

3. Flere arv

La oss lage en klasse som heter FineDineCuisine som 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 klassen fine_dine_cuisine, arver fra både indian_cuisine og italian_cuisine, og arver sine parametere. Den godtar parametrene type, sted og porsjonsstørrelse. type og sted sendes som argumenter for grunnklasse konstruktører. portion_size er en ny objektparameter som ikke deles til baseklasser.

Merknad om diamantarv:

Siden både indiancuisine og italian_cuisine arver fra kjøkkenklasse, danner det et klassisk tilfelle av diamantarv, der flere forekomster av en baseklasse er direkte / indirekte til stede for en avledet klasse. På de fleste språk, som c ++, forårsaker dette et problem, eller abstrakte klasser brukes. Python derimot, spesifiserer sin egen innovative løsning. Den arver de vanlige metodene og attributtene bare når den gir preferanser til klasser i arverekkefølge. Dermed, siden kjøkken er arvet to ganger, blir det foretrukket indian_cuisine-versjonen av kjøkkenet, slik det arves først.

Merknad om klassemedlemmer:

Ethvert attributt som er definert i klassedefinisjonen, men ikke innenfor en funksjon, blir et klasseattributt og deles på tvers av alle forekomster av klassen. Så hvis ett objekt endrer noen av disse klasseattributtene, er endringene synlige for alle andre forekomster (enten det er for samme klasseobjekt eller avledet klasseobjekt). Vær derfor forsiktig når du bruker klasseattributter som ikke er til stede i noen metodedefinisjon.

Konklusjon - Arv i Python

Python har igjen definert et veldig fleksibelt, imøtekommende og kraftig å bruke når det objektorienterte paradigmet er den foretrukne ruten. Det er definitivt et konsept alle kan bruke og bør ha under beltet. Disse konseptene brukes til å danne byggesteinene til en skalerbar og vedlikeholdbar programvare.
Med denne grunnleggende introduksjonen til arv i python, kan du gå foran og målrette virkelige problemstillinger, og se hvor godt et design du kan tenke på.

Anbefalte artikler

Dette er en guide til arv i Python. Her diskuterer vi Introduksjon, syntaks og typer arv i Python sammen med forskjellige eksempler og dens implementering av kode. Du kan også gå gjennom andre foreslåtte artikler -

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