Pythoni pärand (koos näidetega)

Pärand võimaldab meil määratleda klassi, mis võtab kogu funktsionaalsuse üle vanemklassi juurest, ja võimaldab meil lisada rohkem. Selles õpetuses õpitakse Pythonis pärandit kasutama.

Video: Pythoni pärand

Pärand Pythonis

Pärand on objektorienteeritud programmeerimise võimas funktsioon.

See viitab uue klassi määratlemisele, olemasolevat klassi vähe või üldse mitte muutes. Uut klassi nimetatakse tuletatud (või lapse) klassiks ja seda, mille ta pärib, nimetatakse põhiklassiks .

Pythoni pärilikkuse süntaks

 klass BaseClass: põhiklassi klassi keha DerivedClass (BaseClass): tuletatud klassi keha

Tuletatud klass pärib põhiklassi tunnused, kuhu saab uusi funktsioone lisada. Selle tulemuseks on koodi korduvkasutus.

Pärimise näide Pythonis

Pärandi kasutamise demonstreerimiseks võtame näite.

Hulknurk on kinnine kuju, millel on vähemalt kolm külge. Oletame, et meil on klass, mida nimetatakse Polygonjärgmiselt.

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

Sellel klassil on andmete atribuudid, et salvestada külgede arv n ja mõlema külje suurus loendina, mida nimetatakse külgedeks.

inputSides()Meetod võtab suurusjärku kummalgi poolel ja dispSides()kuvab need küljepikkustega.

Kolmnurk on 3 küljega hulknurk. Niisiis saame luua klassi Kolmnurk, mis pärineb hulknurgast. See teeb kõik kolmnurga klassi atribuudid klassile Triangle kättesaadavaks.

Me ei pea neid uuesti määratlema (koodi korduvkasutus). Kolmnurka saab defineerida järgmiselt.

 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)

Klassil Triangleon aga findArea()kolmnurga ala leidmiseks ja printimiseks uus meetod . Siin on näidisjooks.

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

Näeme, et kuigi me ei määratlenud selliseid meetodeid nagu inputSides()või dispSides()klassi jaoks Triangleeraldi, suutsime neid kasutada.

Kui klassis endas atribuuti ei leidu, jätkub otsing baasklassi. See kordub rekursiivselt, kui baasklass on tuletatud teistest klassidest.

Meetodi alistamine Pythonis

Ülalolevas näites pange tähele, et __init__()meetod määratleti mõlemas klassis, nii Kolmnurgas kui ka Hulknurgas. Kui see juhtub, alistab tuletatud klassi meetod baasklassi meetodi. See tähendab, __init__()et kolmnurgas saab eelistada __init__polügooni.

Üldiselt kipume alusmeetodi ületamisel pigem määratlust laiendama kui lihtsalt asendama. Sama tehakse helistades meetodi baasklassist ühest tuletatud klass (helistades Polygon.__init__()alates __init__()in Triangle).

Parem variant oleks sisseehitatud funktsiooni kasutamine super(). Niisiis, super().__init__(3)on samaväärne Polygon.__init__(self,3)ja on eelistatud. super()Pythoni funktsiooni kohta lisateabe saamiseks külastage funktsiooni Python super ().

Kaks sisseehitatud funktsiooni isinstance()ja issubclass()neid kasutatakse pärandite kontrollimiseks.

Funktsioon isinstance()naaseb, Truekui objekt on klassi või muude sellest tuletatud klasside eksemplar. Iga Pythoni klass pärib baasklassi object.

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

Samamoodi issubclass()kasutatakse klassi pärimise kontrollimiseks.

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

Huvitavad Artiklid...