Moștenirea multiplă Python: Ce este și cum să o folosești?

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

Moștenirea multiplă în Python

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.

Moștenirea pe mai multe niveluri în Python

Ordinea de rezolvare a metodei în Python

Fiecare clasă din Python este derivată din objectclasă. 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 objectclasei.

 # 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 MultiDerivedclasă ordinea de căutare este ( MultiDerived, Base1, Base2, object). Această ordine se mai numește linearizare a MultiDerivedclasei ș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.

Vizualizarea moștenirii multiple în 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())

Ieșire

 (,,,,,,)

Pentru a cunoaște algoritmul real despre modul în care este calculat MRO, accesați Discuție pe MRO.

Articole interesante...