Python-overerving (met voorbeelden)

Overerving stelt ons in staat om een ​​klasse te definiëren die alle functionaliteit van een bovenliggende klasse overneemt en ons in staat stelt meer toe te voegen. In deze tutorial leer je hoe je overerving in Python kunt gebruiken.

Video: Overerving van Python

Overerving in Python

Overerving is een krachtige functie bij objectgeoriënteerd programmeren.

Het verwijst naar het definiëren van een nieuwe klasse met weinig of geen wijziging van een bestaande klasse. De nieuwe klasse wordt een afgeleide (of onderliggende) klasse genoemd en degene waarvan hij erft, wordt de basisklasse (of bovenliggende klasse) genoemd .

Syntaxis van Python-overerving

 class BaseClass: Body van basisklasse class DerivedClass (BaseClass): Body van afgeleide klasse

Afgeleide klasse neemt functies over van de basisklasse waar nieuwe functies aan kunnen worden toegevoegd. Dit resulteert in herbruikbaarheid van code.

Voorbeeld van overerving in Python

Laten we een voorbeeld nemen om het gebruik van overerving aan te tonen.

Een polygoon is een gesloten figuur met 3 of meer zijden. Stel dat we een klasse hebben Polygondie als volgt wordt gedefinieerd.

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

Deze klasse heeft gegevensattributen om het aantal zijden n en de grootte van elke zijde op te slaan als een lijst met de naam zijden.

De inputSides()methode neemt de grootte van elke zijde over en dispSides()geeft deze zijdelengten weer.

Een driehoek is een veelhoek met 3 zijden. We kunnen dus een klasse maken met de naam Triangle die erft van Polygon. Dit maakt alle attributen van de Polygon-klasse beschikbaar voor de Triangle-klasse.

We hoeven ze niet opnieuw te definiëren (herbruikbaarheid van code). Driehoek kan als volgt worden gedefinieerd.

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

De klasse Triangleheeft echter een nieuwe methode findArea()om het gebied van de driehoek te vinden en af ​​te drukken. Hier is een voorbeeldrun.

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

We kunnen zien dat hoewel we methoden zoals inputSides()of dispSides()voor klasse niet Triangleafzonderlijk hebben gedefinieerd , we ze wel konden gebruiken.

Als een attribuut niet in de klasse zelf wordt gevonden, gaat het zoeken verder naar de basisklasse. Dit herhaalt zich recursief, als de basisklasse zelf is afgeleid van andere klassen.

Methode overschrijven in Python

Merk op dat in het bovenstaande voorbeeld de __init__()methode is gedefinieerd in beide klassen, zowel Triangle als Polygon. Wanneer dit gebeurt, overschrijft de methode in de afgeleide klasse die in de basisklasse. Dit wil zeggen dat __init__()in Triangle de voorkeur krijgt boven __init__in Polygon.

Over het algemeen hebben we bij het overschrijven van een basismethode de neiging om de definitie uit te breiden in plaats van deze simpelweg te vervangen. Hetzelfde wordt gedaan door de methode in de basisklasse aan te roepen vanuit die in de afgeleide klasse (aanroepen Polygon.__init__()vanuit __init__()in Triangle).

Een betere optie zou zijn om de ingebouwde functie te gebruiken super(). Dus, super().__init__(3)is gelijk aan Polygon.__init__(self,3)en heeft de voorkeur. Voor meer informatie over de super()functie in Python, bezoek Python super () functie.

Twee ingebouwde functies isinstance()en issubclass()worden gebruikt om overervingen te controleren.

De functie isinstance()keert terug Trueals het object een instantie is van de klasse of andere klassen die ervan zijn afgeleid. Elke klasse in Python erft van de basisklasse object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

Evenzo issubclass()wordt gebruikt om te controleren op klasse-overerving.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

Interessante artikelen...