Python višestruko nasljeđivanje: što je to i kako ga koristiti?

U ovom vodiču naučit ćete višestruko nasljeđivanje u Pythonu i kako ga koristiti u svom programu. Također ćete naučiti o nasljeđivanju na više razina i redoslijedu razlučivanja metode.

Python višestruko nasljeđivanje

Klasa se može izvesti iz više od jedne osnovne klase u Pythonu, slično C ++. To se naziva višestruko nasljeđivanje.

U višestrukom nasljeđivanju, značajke svih osnovnih klasa nasljeđuju se u izvedenu klasu. Sintaksa višestrukog nasljeđivanja slična je pojedinačnom nasljeđivanju.

Primjer

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

Ovdje je klasa MultiDerived izvedena iz klasa Base1 i Base2.

Višestruko nasljeđivanje u Pythonu

Klasa MultiDerived nasljeđuje i klase Base1 i Base2.

Python višerazinsko nasljeđivanje

Također možemo naslijediti iz izvedene klase. To se naziva višerazinsko nasljeđivanje. U Pythonu može biti bilo koje dubine.

U višerazinskom nasljeđivanju, značajke osnovne klase i izvedene klase nasljeđuju se u novu izvedenu klasu.

Primjer s odgovarajućom vizualizacijom dan je u nastavku.

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

Ovdje je klasa Derived1 izvedena iz klase Base, a klasa Derived2 izvedena je iz klase Derived1.

Višerazinsko nasljeđivanje u Pythonu

Redoslijed rješavanja metode u Pythonu

Svaka klasa u Pythonu izvedena je iz objectklase. To je najosnovniji tip u Pythonu.

Dakle, tehnički su sve ostale klase, bilo ugrađene ili korisnički definirane, izvedene klase i svi su objekti instance objectklase.

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

U scenariju višestrukog nasljeđivanja, bilo koji navedeni atribut traži se prvo u trenutnoj klasi. Ako se ne pronađe, pretraživanje se nastavlja u matične razrede po dubini, lijevo-desno, a da se dva puta ne traži ista klasa.

Dakle, u gornjem primjeru MultiDerivedklasa potraga nalog ( MultiDerived, Base1, Base2, object). Ovaj se poredak naziva i linearizacijom MultiDerivedklase, a skup pravila korištenih za njegovo pronalaženje naziva se Method Resolution Order (MRO) .

OSP mora spriječiti naručivanje lokalnog prioriteta i također osigurati monotonost. Osigurava da se razred uvijek pojavi pred roditeljima. U slučaju više roditelja, redoslijed je isti kao nizovi osnovnih klasa.

MRO klase može se promatrati kao __mro__atribut ili mro()metoda. Prvi vraća tuple dok drugi vraća popis.

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

Evo malo složenijeg primjera višestrukog nasljeđivanja i njegove vizualizacije uz MRO.

Vizualizacija višestrukog nasljeđivanja u Pythonu
 # 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())

Izlaz

 (,,,,,,,)

Da biste znali stvarni algoritam kako se izračunava MRO, posjetite Rasprava o MRO.

Zanimljivi članci...