Moștenirea Python (cu exemple)

Moștenirea ne permite să definim o clasă care preia toate funcționalitățile dintr-o clasă părinte și ne permite să adăugăm mai multe. În acest tutorial, veți învăța să utilizați moștenirea în Python.

Video: Moștenirea Python

Moștenirea în Python

Moștenirea este o caracteristică puternică în programarea orientată pe obiecte.

Se referă la definirea unei clase noi, cu puține sau deloc modificări unei clase existente. Noua clasă se numește clasă derivată (sau copil) și cea de la care moștenește se numește clasă de bază (sau părinte) .

Sintaxa moștenirii Python

 clasa BaseClass: Corpul clasei de bază clasa DerivedClass (BaseClass): Corpul clasei derivate

Clasa derivată moștenește caracteristici din clasa de bază, unde pot fi adăugate noi caracteristici. Acest lucru are ca rezultat reutilizarea codului.

Exemplu de moștenire în Python

Pentru a demonstra utilizarea moștenirii, să luăm un exemplu.

Un poligon este o figură închisă cu 3 sau mai multe laturi. Spuneți, avem o clasă numită Polygondefinită după cum urmează.

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

Această clasă are atribute de date pentru a stoca numărul de laturi n și magnitudinea fiecărei laturi ca o listă numită laturi.

inputSides()Metoda ia în magnitudinea fiecărei părți și dispSides()afișează aceste lungimi laterale.

Un triunghi este un poligon cu 3 laturi. Deci, putem crea o clasă numită Triunghi care moștenește din Poligon. Acest lucru face ca toate atributele clasei Polygon să fie disponibile clasei Triunghi.

Nu este nevoie să le definim din nou (reutilizarea codului). Triunghiul poate fi definit astfel.

 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)

Cu toate acestea, clasa Triangleare o nouă metodă findArea()pentru a găsi și tipări zona triunghiului. Iată un exemplu de rulare.

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

Putem vedea că, deși nu am definit metode cum ar fi inputSides()sau dispSides()pentru clasă Triangleseparat, am putut să le folosim.

Dacă un atribut nu este găsit în clasa însăși, căutarea continuă până la clasa de bază. Aceasta se repetă recursiv, dacă clasa de bază este ea însăși derivată din alte clase.

Metodă suprascriere în Python

În exemplul de mai sus, observați că __init__()metoda a fost definită în ambele clase, triunghi, precum și poligon. Când se întâmplă acest lucru, metoda din clasa derivată o suprascrie pe cea din clasa de bază. Acest lucru este de spus, __init__()în Triunghi primește preferință față de __init__în Poligon.

În general, atunci când suprascrieți o metodă de bază, avem tendința să extindem definiția, mai degrabă decât să o înlocuim pur și simplu. Același lucru se face apelând metoda în clasa de bază din cea din clasa derivată (apelând Polygon.__init__()din __init__()in Triangle).

O opțiune mai bună ar fi utilizarea funcției încorporate super(). Deci, super().__init__(3)este echivalent Polygon.__init__(self,3)și este preferat. Pentru a afla mai multe despre super()funcția din Python, vizitați funcția Python super ().

Două funcții încorporate isinstance()și issubclass()sunt utilizate pentru a verifica moștenirile.

Funcția isinstance()revine Truedacă obiectul este o instanță a clasei sau a altor clase derivate din aceasta. Fiecare clasă din Python moștenește din clasa de bază object.

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

În mod similar, issubclass()este utilizat pentru a verifica moștenirea clasei.

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

Articole interesante...