„Python“ paveldėjimas (su pavyzdžiais)

Paveldėjimas leidžia mums apibrėžti klasę, kuri perima visas funkcijas iš tėvų klasės, ir leidžia mums pridėti daugiau. Šioje pamokoje išmoksite naudoti paveldėjimą „Python“.

Vaizdo įrašas: „Python“ paveldėjimas

Paveldėjimas „Python“

Paveldėjimas yra galinga objektinio programavimo funkcija.

Tai reiškia naujos klasės apibrėžimą, kai esama klasė yra mažai keičiama arba visai nekeičiama. Naujoji klasė vadinama išvestine (arba vaikų) klase, o klasė, iš kurios paveldima, vadinama bazine (arba tėvų) klase .

„Python“ paveldėjimo sintaksė

 klasė „BaseClass“: pagrindinės klasės kūno turinys „DerivedClass“ („BaseClass“): išvestinės klasės turinys

Išvestinė klasė paveldi savybes iš bazinės klasės, kur prie jos galima pridėti naujų funkcijų. Tai lemia kodo pakartotinį naudojimą.

Paveldėjimo „Python“ pavyzdys

Norėdami parodyti paveldėjimo naudojimą, paimkime pavyzdį.

Daugiakampis yra uždara figūra, turinti 3 ar daugiau šonų. Tarkime, mes turime klasę, vadinamą Polygontaip.

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

Ši klasė turi duomenų atributus, kad kraštinių skaičius n ir kiekvienos pusės dydis būtų saugomas kaip sąrašas, vadinamas pusėmis.

inputSides()Metodas trunka kiekvienos pusės dydžio ir dispSides()rodo šių šalutinių ilgio.

Trikampis yra daugiakampis, turintis 3 kraštus. Taigi, mes galime sukurti klasę, pavadintą Trikampis, kuri paveldima iš daugiakampio. Tai leidžia Trikampio klasei naudotis visais daugiakampio klasės atributais.

Mums nereikia jų dar kartą apibrėžti (kodo pakartotinis naudojimas). Trikampį galima apibrėžti taip.

 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)

Tačiau klasėje Triangleyra naujas metodas findArea()rasti ir atspausdinti trikampio plotą. Čia yra pavyzdinis bandymas.

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

Matome, kad, nors mes atskirai neapibrėžėme tokių metodų kaip klasė inputSides()arba dispSides()klasė Triangle, mes juos galėjome naudoti.

Jei pačioje klasėje atributas nerandamas, paieška tęsiama iki pagrindinės klasės. Tai kartojasi rekursyviai, jei pati pagrindinė klasė yra kilusi iš kitų klasių.

Metodo viršijimas „Python“

Ankstesniame pavyzdyje atkreipkite dėmesį, kad __init__()metodas buvo apibrėžtas abiejose klasėse - trikampyje ir daugiakampyje. Kai taip atsitinka, išvestinės klasės metodas nepaiso bazinės klasės metodo. Tai reiškia, __init__()kad trikampyje pirmenybė teikiama __init__daugiakampiui.

Paprastai, nepaisydami bazinio metodo, mes linkę išplėsti apibrėžimą, o ne paprasčiausiai jį pakeisti. Tas pats daroma ir iškviečiant metodą bazinėje klasėje iš išvestinės klasės metodo (skambinant Polygon.__init__()__init__()in Triangle).

Geresnis variantas būtų naudoti įmontuotą funkciją super(). Taigi, super().__init__(3)yra lygiavertis Polygon.__init__(self,3)ir yra pageidaujamas. Norėdami sužinoti daugiau apie „ super()Python “ funkciją, apsilankykite „Python super ()“ funkcijoje.

Du built-in funkcijos isinstance()ir issubclass()yra naudojama patikrinti palikimo.

Funkcija isinstance()grąžinama, Truejei objektas yra klasės ar kitų iš jos gautų klasių egzempliorius. Kiekviena „Python“ klasė paveldi iš bazinės klasės object.

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

Panašiai issubclass()naudojamas patikrinti klasės paveldėjimą.

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

Įdomios straipsniai...