În acest tutorial, veți afla despre moștenirea multiplă în Python și cum să o utilizați în programul dvs. Veți afla, de asemenea, despre moștenirea pe mai multe niveluri și ordinea de rezoluție a metodei.
Moștenirea multiplă Python
O clasă poate fi derivată din mai multe clase de bază în Python, similar cu C ++. Aceasta se numește moștenire multiplă.
În moștenirea multiplă, caracteristicile tuturor claselor de bază sunt moștenite în clasa derivată. Sintaxa moștenirii multiple este similară cu moștenirea unică.
Exemplu
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Aici, clasa MultiDerived este derivată din clasele Base1 și Base2.

Clasa MultiDerived moștenește din clasele Base1 și Base2.
Moștenirea Python pe mai multe niveluri
De asemenea, putem moșteni dintr-o clasă derivată. Aceasta se numește moștenire pe mai multe niveluri. Poate fi de orice adâncime în Python.
În moștenirea pe mai multe niveluri, caracteristicile clasei de bază și ale clasei derivate sunt moștenite în noua clasă derivată.
Un exemplu cu vizualizare corespunzătoare este dat mai jos.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Aici, clasa Derived1 este derivată din clasa Base, iar clasa Derived2 este derivată din clasa Derived1.

Ordinea de rezolvare a metodei în Python
Fiecare clasă din Python este derivată din object
clasă. Este cel mai tip de bază din Python.
Deci, din punct de vedere tehnic, toate celelalte clase, fie încorporate, fie definite de utilizator, sunt clase derivate și toate obiectele sunt instanțe ale object
clasei.
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
În scenariul de moștenire multiplă, orice atribut specificat este căutat mai întâi în clasa curentă. Dacă nu este găsită, căutarea continuă în clasele părinte în profunzime-prima, stânga-dreapta, fără a căuta aceeași clasă de două ori.
Deci, în exemplul de mai sus de MultiDerived
clasă ordinea de căutare este ( MultiDerived
, Base1
, Base2
, object
). Această ordine se mai numește linearizare a MultiDerived
clasei și setul de reguli utilizate pentru a găsi această ordine se numește Method Resolution Order (MRO) .
MRO trebuie să împiedice ordonarea locală a priorității și, de asemenea, să ofere monotonitate. Se asigură că o clasă apare întotdeauna în fața părinților săi. În cazul mai multor părinți, ordinea este aceeași cu tuplurile claselor de bază.
MRO-ul unei clase poate fi privit ca __mro__
atribut sau mro()
metodă. Primul returnează un tuplu, în timp ce cel din urmă returnează o listă.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )
Iată un exemplu de moștenire multiplă puțin mai complex și vizualizarea acestuia împreună cu 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())
Ieșire
(,,,,,,)
Pentru a cunoaște algoritmul real despre modul în care este calculat MRO, accesați Discuție pe MRO.