Python Multiple Arv: Hva er det og hvordan bruker jeg det?

I denne opplæringen lærer du om flere arv i Python og hvordan du bruker den i programmet ditt. Du vil også lære om arv på flere nivåer og metodeoppløsningsrekkefølgen.

Python flere arv

En klasse kan avledes fra mer enn en basisklasse i Python, i likhet med C ++. Dette kalles flere arv.

I flere arv arves funksjonene til alle basisklassene til den avledede klassen. Syntaksen for flere arv er lik enkeltarv.

Eksempel

 class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

Her er MultiDerived-klassen avledet fra Base1- og Base2-klassene.

Flere arv i Python

MultiDerived-klassen arver fra både Base1- og Base2-klassene.

Python Multilevel Arv

Vi kan også arve fra en avledet klasse. Dette kalles arv på flere nivåer. Det kan være av hvilken som helst dybde i Python.

I arv på flere nivåer blir funksjonene til baseklassen og den avledede klassen arvet til den nye avledede klassen.

Et eksempel med tilsvarende visualisering er gitt nedenfor.

 class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

Her er Derived1-klassen avledet fra Base-klassen, og Derived2-klassen er avledet fra Derived1-klassen.

Multilevel Arv i Python

Metodeoppløsningsrekkefølge i Python

Hver klasse i Python er avledet fra objectklassen. Det er den mest basistypen i Python.

Så teknisk sett er alle andre klasser, enten innebygde eller brukerdefinerte, avledede klasser, og alle objekter er forekomster av objectklassen.

 # Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))

I scenarioet med flere arv, blir et spesifisert attributt søkt først i gjeldende klasse. Hvis ikke funnet, fortsetter søket i foreldreklasser på dybde-første, venstre-høyre måte uten å søke i samme klasse to ganger.

Så, i eksempelet ovenfor av MultiDerivedklassen søkerekkefølgen er ( MultiDerived, Base1, Base2, object). Denne rekkefølgen kalles også linearisering av MultiDerivedklasse, og settet med regler som brukes for å finne denne ordren kalles Method Resolution Order (MRO) .

MRO må forhindre lokal prioritering og også gi monotonisitet. Det sørger for at en klasse alltid vises for foreldrene. I tilfelle flere foreldre er rekkefølgen den samme som tupler i baseklasser.

MRO i en klasse kan sees på som __mro__attributtet eller mro()metoden. Førstnevnte returnerer en tuple mens sistnevnte returnerer en liste.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Her er et litt mer komplekst eksempel på flere arv og visualisering sammen med MRO.

Visualisering av flere arv i Python
 # Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())

Produksjon

 (,,,,,,)

For å vite den faktiske algoritmen for hvordan MRO beregnes, besøk Diskusjon om MRO.

Interessante artikler...