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.

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.

Metodeoppløsningsrekkefølge i Python
Hver klasse i Python er avledet fra object
klassen. 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 object
klassen.
# 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 MultiDerived
klassen søkerekkefølgen er ( MultiDerived
, Base1
, Base2
, object
). Denne rekkefølgen kalles også linearisering av MultiDerived
klasse, 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.

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