У овом упутству ћете сазнати вишеструко наслеђивање у Питхону и како га користити у свом програму. Такође ћете научити о наслеђивању на више нивоа и редоследу резолуције методе.
Питхон вишеструко наслеђивање
Класа се може извести из више од једне основне класе у Питхону, слично Ц ++. То се назива вишеструко наслеђивање.
У вишеструком наслеђивању, особине свих основних класа наслеђују се у изведену класу. Синтакса вишеструког наслеђивања слична је појединачном наслеђивању.
Пример
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Овде је класа МултиДеривед изведена из класа Басе1 и Басе2.

Класа МултиДеривед наслеђује и класе Басе1 и Басе2.
Питхон вишеразинско наслеђивање
Такође можемо наследити из изведене класе. Ово се назива наслеђивање на више нивоа. У Питхону може бити било које дубине.
У вишеразинском наслеђивању, карактеристике основне класе и изведене класе наслеђују се у нову изведену класу.
Пример са одговарајућом визуелизацијом дат је у наставку.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Овде је класа Деривед1 изведена из класе Басе, а класа Деривед2 изведена је из класе Деривед1.

Налог за решавање метода у Питхону
Свака класа у Питхону је изведена из object
класе. То је најосновнији тип у Питхону.
Дакле, технички су све остале класе, било уграђене или кориснички дефинисане, изведене класе и сви објекти су инстанце object
класе.
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
У сценарију вишеструког наслеђивања, било који наведени атрибут се тражи прво у тренутној класи. Ако није пронађена, претрага се наставља у родитељске класе по дубини, лево-десно, а да се два пута не тражи иста класа.
Дакле, у горњем примеру MultiDerived
класе редослед потрага ( MultiDerived
, Base1
, Base2
, object
). Овај редослед се такође назива линеаризација MultiDerived
класе, а скуп правила коришћених за проналажење овог реда назива се Резолуција метода (МРО) .
ОСП мора спречити локално одређивање приоритета и такође обезбедити монотоност. Осигурава да се разред увек појави пред родитељима. У случају више родитеља, редослед је исти као низови основних класа.
МРО класе може се посматрати као __mro__
атрибут или mro()
метода. Први враћа корпицу, док други враћа листу.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.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())
Оутпут
(,,,,,,)
Да бисте знали стварни алгоритам како се израчунава МРО, посетите Дискусију о МРО.