Python-öröklés (példákkal)

Az öröklés lehetővé teszi számunkra, hogy meghatározzunk egy osztályt, amely az összes funkciót elveszi a szülő osztálytól, és lehetővé teszi számunkra, hogy további adatait hozzáadjuk. Ebben az oktatóanyagban megtanulja használni az öröklést a Pythonban.

Videó: Python öröklés

Öröklés a Pythonban

Az öröklődés az objektumorientált programozás egyik erőteljes jellemzője.

Ez egy új osztály definiálására vonatkozik, egy meglévő osztály módosítása nélkül vagy egyáltalán nem. Az új osztályt származtatott (vagy gyermek) osztálynak hívják, és azt, amelyet örököl, alap- (vagy szülő) osztálynak .

Python öröklődés szintaxisa

 osztály BaseClass: Az alaposztály osztályának törzse DerivedClass (BaseClass): A származtatott osztály törzse

A származtatott osztály az alaposztály osztályait örökli, ahol új funkciók adhatók hozzá. Ez a kód újrafelhasználhatóságát eredményezi.

Példa az öröklődésre a Pythonban

Az öröklés használatának bemutatásához vegyünk egy példát.

A sokszög egy zárt ábra, amelynek három vagy több oldala van. Mondjuk, van egy osztályunk, Polygonamelyet az alábbiak szerint definiálunk.

 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))

Ennek az osztálynak vannak adatattribútumai, amelyek az n oldalak számát és az egyes oldalak nagyságát oldalaknak nevezett listaként tárolják.

A inputSides()módszer figyelembe veszi az egyes oldalak nagyságát, és dispSides()megjeleníti ezeket az oldalhosszakat.

A háromszög sokszög, amelynek 3 oldala van. Tehát létrehozhatunk egy Háromszög nevű osztályt, amely a sokszögtől örököl. Ez a Polygon osztály összes attribútumát elérhetővé teszi a Háromszög osztály számára.

Nem kell őket újra definiálnunk (kód újrafelhasználhatóság). A háromszöget a következőképpen lehet meghatározni.

 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)

Az osztálynak Triangleazonban új módszere findArea()van a háromszög területének megkeresésére és kinyomtatására. Itt egy minta futtatás.

 >>> 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

Láthatjuk, hogy annak ellenére, hogy nem külön-külön definiáltuk az olyan módszereket, mint a inputSides()vagy dispSides()az osztály Triangle, mégis tudtuk használni őket.

Ha egy attribútum nem található magában az osztályban, akkor a keresés folytatódik az alaposztályig. Ez megismétlődik rekurzívan, ha az alaposztály maga más osztályokból származik.

Módszer felülírása Pythonban

A fenti példában vegye figyelembe, hogy a __init__()módszert meghatározták mindkét osztályban, a Háromszögben és a Sokszögben is. Amikor ez megtörténik, a származtatott osztályban szereplő módszer felülírja az alaposztályt. Ez azt jelenti, hogy __init__()a háromszögben előnyben részesíti __init__a sokszöget.

Általánosságban, ha felülbírálunk egy alapmódszert, hajlamosak vagyunk a meghatározást kiterjeszteni, nem pedig egyszerűen kicserélni. Ugyanezt tesszük, ha a metódust az alaposztályban meghívjuk a származtatott osztályból (behívás Polygon.__init__()innen: __init__()in Triangle).

Jobb lehetőség lenne a beépített funkció használata super(). Tehát super().__init__(3)egyenértékű Polygon.__init__(self,3)és előnyben részesítendő. Ha többet szeretne megtudni super()a Python funkciójáról, keresse fel a Python super () függvényt.

Két beépített funkció isinstance(), issubclass()amelyek az örökségek ellenőrzésére szolgálnak.

A függvény akkor isinstance()tér vissza, Trueha az objektum az osztály vagy az abból levezetett más osztályok példánya. A Python minden osztálya örököl az alaposztálytól object.

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

Hasonlóképpen issubclass()használják az osztály öröklődésének ellenőrzésére.

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

érdekes cikkek...