Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python-overerving

Python-erfenis

Overerving stelt ons in staat 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 overerving te gebruiken in Python.

Video:Python-erfenis

Overerving in Python

Overerving is een krachtige functie in objectgeoriënteerd programmeren.

Het verwijst naar het definiëren van een nieuwe klasse met weinig of geen wijziging aan een bestaande klasse. De nieuwe klasse heet afgeleide (of onderliggende) klasse en degene waarvan het erft wordt de base (of parent) class . genoemd .


Python-overervingssyntaxis

class BaseClass:
  Body of base class
class DerivedClass(BaseClass):
  Body of derived class

Afgeleide klasse erft functies 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 te demonstreren.

Een polygoon is een gesloten figuur met 3 of meer zijden. Stel, we hebben een klas genaamd Polygon gedefinieerd als volgt.

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 . op te slaan en grootte van elke zijde als een lijst genaamd zijden .

De inputSides() methode neemt de grootte van elke zijde en dispSides() geeft deze zijlengtes 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 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)

Echter, klasse Triangle heeft een nieuwe methode findArea() om de oppervlakte 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 dat zien, ook al hebben we geen methoden gedefinieerd zoals inputSides() of dispSides() voor klas Triangle afzonderlijk konden we ze gebruiken.

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


Methode overschrijven in Python

Merk in het bovenstaande voorbeeld op dat __init__() methode werd gedefinieerd in beide klassen, Triangle ook Polygoon . Wanneer dit gebeurt, overschrijft de methode in de afgeleide klasse die in de basisklasse. Dit wil zeggen, __init__() in Driehoek krijgt de voorkeur boven de __init__ in Veelhoek .

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 van die in de afgeleide klasse (aanroepen van Polygon.__init__() van __init__() in Triangle ).

Een betere optie zou zijn om de ingebouwde functie super() . te gebruiken . 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 de functie Python super().

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

De functie isinstance() retourneert True als 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

Python

  1. Python-gegevenstypen
  2. Python-operators
  3. Python pass-instructie
  4. Python-woordenboek
  5. Aangepaste Python-uitzonderingen
  6. Objectgeoriënteerd programmeren in Python
  7. Overbelasting van Python-operator
  8. Python @property decorateur
  9. type() en isinstance() in Python met voorbeelden
  10. C# - Overerving
  11. Python - Objectgericht