Introduktion till arv i Python

Python, som kan skryta med flera paradigmfunktioner, rymmer uppenbarligen den objektorienterade programmeringsstilen. Och vilket språk som helst kan inte vara löjligt nog för att hävda objektorienterad metod utan att ge stöd för arv, inklusive python. Python ger en tydligt unik arvsmak, vilket möjliggör extremt kraftfulla operationer som inte har sett förut. Även om det har vissa begränsningar, för till exempel, för närvarande uppnås säkerhet genom räckvidd för klassmedlemmar endast genom konvention och är inte i sig en del av språket. Således är medlemmar som deklarerats som privata faktiskt tillgängliga offentligt med vissa ändringar.

Klass Syntax

Syntaxen för att definiera en härledd klass när en eller flera basklasser ska ärvas är som följer:

class derivedClassName(baseClassName(, …)):


Som visas specificerar den härledda klassen en kommaseparerad lista över basklasser att ärva från i klassdefinitionshuvudet.

Klasskök

Låt oss börja med att definiera en basklass som används för alla våra exempel:

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

Basen som visas definierar en objektmall som används för att definiera kök och fånga om det är ett kokt kök eller inte. Den har också en konstruktör som används för att acceptera köket. Senare skapas ett objekt av typen 'kokt'.

Arvstyper i Python

Det finns huvudsakligen två typer av arv, varav en kombination ger varje annan typ.

1. Enskild arv: En basklass, som ärvs av en härledd klass. Detta är den enklaste arvsorten. Också den minimala möjliga. Den härledda klassen åberopar automatiskt basklasskonstruktören.

2. Multipel ärft: Flera basklasser ärvda av en härledd klass. Basklasskonstruktörerna åberopas i den ordning klasserna härleddes.

Deriverade typer av ärft

Att kombinera ovanstående två former av arv kan leda till följande arvstyper:

1. Hierarkisk arv: En basklass som ärvs av flera härledda klasser. Varje härledd klass kommer att arbeta oberoende men objekt delar klassvariablerna mellan olika klasser.

2. Erfarenhet på flera nivåer: En härledd klass som fungerar som basklass för en annan härledd klass. Basklasskonstruktörer åberopas rekursivt i detta fall.

3. Hybridarv: En kombination av flera fall av ovan nämnda arv. Detta kan leda till alla tänkbara kombinationer av klasser.

Exempel på arv i Python

Nedan följer exempel på Arv i Python:

1. Enstaka arv

Låt oss skapa en klass som heter Indian Cuisine som ärver klassköket.

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

Som visas i en ny klass skapades indian_cusine som accepterar typparameter och åberopar en basklasskonstruktör som passerar parametern. Det skapar dessutom en ny objektvariabel plats . Detta används endast i den härledda klassen och är inte synlig för basklassobjekt.

2. Hierarkisk arv

Låt oss skapa en klass som heter ItalianCuisine som ärver klassköket:

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

Som visas i en ny klass skapades italian_cusine som accepterar typparameter och åberopar en basklasskonstruktör som passerar parametern. Det skapar dessutom en ny objektvariabel plats . Detta används endast i den härledda klassen och är inte synlig för basklassobjekt. Nu, eftersom två klasser, indiska_kusiner och italienska_cuisine ärver köket klass, finns det en hierarkisk arv implementerad.

3. Multipel ärft

Låt oss skapa en klass som heter FineDineCuisine som ärver från flera 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 nya klassen fine_dine_cuisine, ärver både indiancuisine och italian_cuisine och ärver sina parametrar. Den accepterar parametrarna typ, plats och portion_storlek. typ och plats skickas som argument för basklasskonstruktörer. portion_size är en ny objektparameter som inte delas till basklasser.

Obs om Diamond Inheritance:

Nu eftersom både indiancuisine och italian_cuisine ärver från köket klass, bildar det ett klassiskt fall av diamantarv, där flera instanser av en basklass är direkt / indirekt närvarande för en härledd klass. På de flesta språk, som c ++, orsakar detta ett problem, eller abstrakta klasser används. Python å andra sidan specificerar sin egen innovativa lösning. Det ärver de vanliga metoderna och attributen endast en gång för att föredra klasser i arvsordning. Därför, eftersom köket ärvs två gånger, ges företräde till indian_cuisine versionen av köket, eftersom det ärvs först.

Anmärkning om klassmedlemmar:

Alla attribut som definieras inom klassdefinitionen, men inte inom en funktion, blir ett klassattribut och delas över alla instanser av klassen. Således om ett objekt ändrar något av dessa klassattribut är ändringarna synliga för alla andra instanser (vare sig det gäller samma klassobjekt eller härledda klassobjekt). Så var försiktig när du använder klassattribut som inte finns i någon metoddefinition.

Slutsats - Arv i Python

Python har återigen definierat ett mycket flexibelt, tillmötesgående och kraftfullt att använda när det objektorienterade paradigmet är den föredragna vägen. Det är definitivt ett koncept som alla kan använda och borde ha under bältet. Dessa koncept används för att bilda byggstenarna för alla skalbara och underhållbara programvaror.
Med denna grundläggande introduktion till arv i python kan du gå vidare och rikta in verkliga problemuttalanden och se hur väl en design du kan tänka på.

Rekommenderade artiklar

Detta är en guide till arv i Python. Här diskuterar vi introduktionen, syntaxen och typer av ärft i Python tillsammans med olika exempel och dess kodimplementering. Du kan också gå igenom våra andra föreslagna artiklar -

    1. Arv i Java
    2. Vad är arv i programmering?
    3. Arv i C #
    4. Övergripande i Java
    5. Arv i PHP
    6. Förklara abstrakt klass i C # med exempel

Kategori: