Inleiding tot erfenis in Python

Python, met meerdere paradigma-mogelijkheden, past duidelijk bij de objectgeoriënteerde stijl van programmeren. En elke taal kan niet belachelijk genoeg zijn om objectgeoriënteerde methodologie te claimen zonder ondersteuning voor overerving, inclusief python. Python biedt een uitgesproken unieke smaak van overerving, waardoor extreem krachtige bewerkingen mogelijk zijn die nog nooit eerder zijn gezien. Hoewel het wel enkele beperkingen met zich meebrengt, bijvoorbeeld, momenteel wordt beveiliging door ruimte voor de klasleden alleen bereikt door conventie en maakt het niet inherent deel uit van de taal. Leden die als privé zijn verklaard, zijn dus met enkele wijzigingen feitelijk openbaar toegankelijk.

Klasse Syntaxis

De syntaxis om een ​​afgeleide klasse te definiëren wanneer een of meer basisklassen moeten worden geërfd, is als volgt:

class derivedClassName(baseClassName(, …)):


Zoals weergegeven, geeft de afgeleide klasse een door komma's gescheiden lijst van basisklassen aan om over te nemen in de kop van de klassedefinitie.

Klasse keuken

Laten we beginnen met het definiëren van een basisklasse die wordt gebruikt voor al onze voorbeelden:

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

De getoonde basis definieert een objectsjabloon dat wordt gebruikt om keukens te definiëren en vast te leggen of het een gekookte keuken is of niet. Het heeft ook een aannemer die het type keuken accepteert. Later wordt een object gemaakt van het type 'gekookt'.

Soorten overerving in Python

Er zijn hoofdzakelijk twee soorten overerving, waarvan een combinatie elk ander type oplevert.

1. Enkelvoudige overerving: één basisklasse, geërfd door één afgeleide klasse. Dit is het eenvoudigste type overerving. Ook de minimaal mogelijke. De afgeleide klasse roept automatisch de constructeur van de basisklasse aan.

2. Meerdere overerving: meerdere basisklassen overgenomen door één afgeleide klasse. De constructeurs van de basisklasse worden aangeroepen in de volgorde waarin de klassen zijn afgeleid.

Afgeleide soorten overerving

Het combineren van de bovengenoemde twee vormen van overerving kan leiden tot de volgende soorten overerving:

1. Hiërarchische erfenis: één basisklasse overgenomen door meerdere afgeleide klassen. Elke afgeleide klasse werkt onafhankelijk, maar objecten delen de klassenvariabelen over verschillende klassen.

2. Overname op meerdere niveaus: een afgeleide klasse die als basisklasse dient voor een andere afgeleide klasse. De constructeurs van de basisklasse worden in dit geval recursief aangeroepen.

3. Hybride overerving: een combinatie van meerdere instanties van de bovengenoemde soorten overerving. Dit kan leiden tot elke denkbare combinatie van klassen.

Voorbeelden van overerving in Python

Hieronder staan ​​enkele voorbeelden van overerving in Python:

1. Enkele erfenis

Laten we een klasse maken die Indiase keuken heet en die klasse-keuken erft.

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

Zoals getoond in een nieuwe klasse, werd indian_cusine gemaakt die de parameter type accepteert en een constructor van de basisklasse oproept en de parameter doorgeeft. Het creëert ook een nieuwe objectvariabele plaats . Dit wordt alleen gebruikt in de afgeleide klasse en niet zichtbaar voor basisklasseobjecten.

2. Hiërarchisch erfdeel

Laten we een klasse maken met de naam ItalianCuisine die de klassieke keuken erft:

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

Zoals getoond in een nieuwe klasse, is italian_cusine gemaakt die de parameter type accepteert en een constructor van de basisklasse oproept en de parameter doorgeeft. Het creëert ook een nieuwe objectvariabele plaats . Dit wordt alleen gebruikt in de afgeleide klasse en niet zichtbaar voor basisklasseobjecten. Nu, aangezien twee klassen, indian_cusines en italian_cuisine cuisine class erven, is er een hiërarchische erfenis geïmplementeerd.

3. Meerdere overerving

Laten we een klasse maken met de naam FineDineCuisine die van meerdere klassen wordt geërfd.

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)

De nieuwe klasse fine_dine_cuisine, erft van zowel indian_cuisine als italian_cuisine, neemt hun parameters over. Het accepteert de parameters type, plaats en portiegrootte. type en plaats worden doorgegeven als argumenten voor constructeurs van de basisklasse. portion_size is een nieuwe objectparameter die niet wordt gedeeld met basisklassen.

Opmerking over Diamond Inheritance:

Aangezien zowel indian_cuisine als italian_cuisine erven van de kookklasse, vormt het een klassiek geval van diamantovererving, waarbij meerdere instanties van een basisklasse direct / indirect aanwezig zijn voor een afgeleide klasse. In de meeste talen, zoals c ++, veroorzaakt dit een probleem of worden abstracte klassen gebruikt. Python daarentegen geeft zijn eigen innovatieve oplossing aan. Het neemt de gebruikelijke methoden en attributen slechts eenmaal over en geeft de voorkeur aan klassen in de volgorde van overerving. Aangezien de keuken dus twee keer wordt geërfd, wordt de voorkeur gegeven aan de indian_cuisine-versie van de keuken, omdat deze eerst wordt geërfd.

Opmerking over klasleden:

Elk kenmerk dat binnen de klassedefinitie wordt gedefinieerd, maar niet binnen een functie, wordt een klassenkenmerk en wordt gedeeld door alle instanties van de klasse. Dus als een object een van deze klasse-attributen wijzigt, zijn de wijzigingen zichtbaar voor alle andere instanties (voor hetzelfde klasseobject of hetzelfde klasseobject). Wees dus voorzichtig bij het gebruik van klasse-attributen die in geen enkele methodedefinitie aanwezig zijn.

Conclusie - erfenis in Python

Python heeft opnieuw een zeer flexibel, meegaand en krachtig gedefinieerd om te gebruiken wanneer het objectgeoriënteerde paradigma de voorkeursroute is. Het is absoluut een concept dat iedereen kan gebruiken en onder zijn riem zou moeten hebben. Deze concepten worden gebruikt om de bouwstenen te vormen van elk schaalbaar en onderhoudbaar stuk software.
Met deze basisintroductie van erfenis in python kun je je richten op echte probleemverklaringen en zien hoe goed een ontwerp je kunt bedenken.

Aanbevolen artikelen

Dit is een gids voor overerving in Python. Hier bespreken we de introductie, syntaxis en soorten overerving in Python samen met verschillende voorbeelden en de implementatie van de code. U kunt ook onze andere voorgestelde artikelen doornemen -

    1. Overerving in Java
    2. Wat is overerving in programmeren?
    3. Overerving in C #
    4. Overschrijven in Java
    5. Overerving in PHP
    6. Verklaar Abstracte Klasse in C # met Voorbeeld