Selles õpetuses saate teada Pythoni mitmekordse pärimise kohta ja selle kohta, kuidas seda oma programmis kasutada. Samuti saate teada mitmetasandilise pärimise ja meetodi lahendamise järjekorra kohta.
Pythoni mitmekordne pärand
Klass võib olla tuletatud rohkem kui ühest Pythoni baasklassist, sarnaselt C ++ -ga. Seda nimetatakse mitmekordseks pärimiseks.
Mitmekordse pärimise korral pärandatakse tuletatud klassi kõigi põhiklasside tunnused. Mitme pärandi süntaks sarnaneb ühe pärimisega.
Näide
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Siin on klass MultiDerived tuletatud klassidest Base1 ja Base2.

Klass MultiDerived pärib nii Base1 kui ka Base2 klassidest.
Pythoni mitmetasandiline pärand
Pärida võime ka tuletatud klassist. Seda nimetatakse mitmetasandiliseks pärimiseks. See võib olla Pythonis mis tahes sügavusega.
Mitmetasandilise pärimise korral päritakse baasklassi ja tuletatud klassi tunnused uude tuletatud klassi.
Allpool on toodud näide vastava visualiseerimisega.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Siin tuletatakse Derived1 klass baasiklassist ja Derived2 klass derived1 klassist.

Meetodi lahendamise järjekord Pythonis
Iga Pythoni klass on tuletatud object
klassist. See on Pythoni kõige põhitüüp.
Nii et tehniliselt on kõik muud klassid, kas sisseehitatud või kasutaja määratletud, tuletatud klassid ja kõik objektid on object
klassi eksemplarid .
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
Mitme pärimise stsenaariumi korral otsitakse mis tahes määratud atribuuti praeguses klassis esimesena. Kui seda ei leita, jätkatakse otsimist vanemklassidesse sügavalt kõigepealt vasakule-paremale, otsimata samas klassis kaks korda.
Niisiis, eespool näiteks MultiDerived
klassi otsingu et on ( MultiDerived
, Base1
, Base2
, object
). Seda järjekorda nimetatakse ka MultiDerived
klassi lineariseerimiseks ja selle järjekorra leidmiseks kasutatavat reeglite kogumit nimetatakse meetodi eraldamise järjekorraks ( Method Resolution Order, MRO) .
MRO peab vältima kohaliku järjestuse järjestamist ja pakkuma ka monotoonsust. See tagab, et klass ilmub alati oma vanemate ette. Mitme vanema puhul on järjestus sama, mis põhiklassi rühmadel.
Klassi MRO-d saab vaadata __mro__
atribuudi või mro()
meetodina. Esimene tagastab kahese, teine aga loendi.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )
Siin on natuke keerulisem mitmekordse pärimise näide ja selle visualiseerimine koos MRO-ga.

# 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())
Väljund
(,,,,,,)
MRO arvutamise tegeliku algoritmi tundmaõppimiseks külastage jaotist Arutelu MRO kohta.