Python mantojums (ar piemēriem)

Mantošana ļauj mums noteikt klasi, kas pārņem visu funkcionalitāti no vecāku klases, un ļauj mums pievienot vairāk. Šajā apmācībā jūs iemācīsities izmantot mantojumu Python.

Video: Python mantojums

Mantojums Python

Mantošana ir spēcīga iezīme objektorientētā programmēšanā.

Tas attiecas uz jaunas klases noteikšanu ar nelielu izmaiņas esošajā klasē vai bez tās. Jauno klasi sauc par atvasināto (vai bērnu) klasi, un klasi, no kuras tā pārmanto, sauc par bāzes (vai vecāku) klasi .

Pitona mantojuma sintakse

 klase BaseClass: bāzes klases pamatteksts DerivedClass (BaseClass): atvasinātas klases pamatteksts

Atvasinātā klase pārmanto funkcijas no bāzes klases, kur tai var pievienot jaunas funkcijas. Tā rezultātā kods tiek atkārtoti lietojams.

Mantojuma piemērs Python

Lai parādītu mantojuma izmantošanu, ņemsim piemēru.

Daudzstūris ir slēgta figūra ar 3 vai vairāk malām. Sakiet, mums ir klase, ko sauc Polygonšādi.

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

Šai klasei ir datu atribūti, lai sānu skaitu n un katras puses lielumu saglabātu kā sarakstu, ko sauc par sāniem.

inputSides()Metode notiek ar lielumu katrā pusē, un dispSides()parāda šīs sānu garumu.

Trijstūris ir daudzstūris ar 3 malām. Tātad, mēs varam izveidot klasi ar nosaukumu Triangle, kas tiek mantota no daudzstūra. Tas padara visus daudzstūra klases atribūtus pieejamus trīsstūra klasei.

Mums tās vairs nav jādefinē (koda atkārtota izmantošana). Trīsstūri var definēt šādi.

 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)

Tomēr klasei Triangleir jauna metode, findArea()kā atrast un izdrukāt trijstūra laukumu. Šeit ir parauga palaišana.

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

Mēs varam redzēt, ka, pat ja mēs atsevišķi nedefinējām tādas metodes kā klasei inputSides()vai dispSides()klasei Triangle, mēs spējām tās izmantot.

Ja atribūts nav atrodams pašā klasē, meklēšana turpinās līdz pamatklasei. Tas atkārtojas rekursīvi, ja bāzes klase pati ir atvasināta no citām klasēm.

Metode ignorēšana Python

Iepriekš minētajā piemērā ievērojiet, ka __init__()metode tika definēta abās klasēs - gan trīsstūrī, gan daudzstūrī. Kad tas notiek, atvasinātās klases metode pārspēj metodi, kas ir bāzes klasē. Tas nozīmē, __init__()ka trīsstūrī tiek dota priekšroka salīdzinājumā ar __init__daudzstūri.

Parasti, ignorējot bāzes metodi, mēs mēdzam paplašināt definīciju, nevis vienkārši to aizstāt. Tas pats tiek darīts, izsaucot metodi bāzes klasē no atvasinātās klases metodes (izsaucot Polygon.__init__()no __init__()iekšienes Triangle).

Labāka iespēja būtu izmantot iebūvēto funkciju super(). Tātad, super().__init__(3)ir līdzvērtīgs Polygon.__init__(self,3)un ir vēlams. Lai uzzinātu vairāk par super()Python funkciju, apmeklējiet funkciju Python super ().

Divas iebūvētas funkcijas, isinstance()un tās issubclass()tiek izmantotas, lai pārbaudītu mantojumu.

Funkcija isinstance()atgriežas, Trueja objekts ir klases vai citu no tā atvasinātu klašu eksemplārs. Katra Python klase manto no bāzes klases object.

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

Līdzīgi issubclass()tiek izmantots, lai pārbaudītu klases mantojumu.

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

Interesanti raksti...