Питхон вишеструко наслеђивање: шта је то и како се користи?

У овом упутству ћете сазнати вишеструко наслеђивање у Питхону и како га користити у свом програму. Такође ћете научити о наслеђивању на више нивоа и редоследу резолуције методе.

Питхон вишеструко наслеђивање

Класа се може извести из више од једне основне класе у Питхону, слично Ц ++. То се назива вишеструко наслеђивање.

У вишеструком наслеђивању, особине свих основних класа наслеђују се у изведену класу. Синтакса вишеструког наслеђивања слична је појединачном наслеђивању.

Пример

 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())

Оутпут

 (,,,,,,)

Да бисте знали стварни алгоритам како се израчунава МРО, посетите Дискусију о МРО.

Занимљиви Чланци...