Наслеђивање Питхона (са примерима)

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

Видео: Питхон наслеђивање

Наслеђивање у Питхону

Наслеђивање је моћна карактеристика објектно оријентисаног програмирања.

Односи се на дефинисање нове класе са мало или нимало модификација постојеће класе. Нова класа назива се изведена (или подређена) класа, а она из које наслеђује назива се основна (или родитељска) класа .

Синтакса наслеђивања Питхона

 класа БасеЦласс: Тело класе основне класе ДериведЦласс (БасеЦласс): Тело изведене класе

Изведена класа наслеђује особине из основне класе где јој се могу додати нове функције. То резултира поновном употребљивошћу кода.

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

Да покажемо употребу наследства, узмимо пример.

Полигон је затворена фигура са 3 или више страница. Рецимо, имамо класу која се назива Polygonдефинисана на следећи начин.

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

Ова класа има атрибуте података за чување броја страница н и величине сваке стране као листе која се назива странице.

inputSides()Метод узима у обиму сваке стране и dispSides()приказује ове споредне дужине.

Троугао је многоугао са 3 странице. Дакле, можемо створити класу названу Триангле која наслеђује од Полигона. Ово чини све атрибуте класе Полигон доступним класи Триангле.

Не треба их поново дефинисати (поновна употребљивост кода). Троугао се може дефинисати на следећи начин.

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

Међутим, класа Triangleима нову методу findArea()за проналажење и штампање површине троугла. Ево примера извођења.

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

Можемо видети да, иако нисмо посебно дефинисали методе попут inputSides()или dispSides()за наставу Triangle, могли смо да их користимо.

Ако атрибут није пронађен у самој класи, претрага се наставља до основне класе. Ово се понавља рекурзивно, ако је основна класа сама изведена из других класа.

Надјачавање метода у Питхону

У горњем примеру, приметите да је __init__()метода дефинисана у обе класе, троугао као и Полигон. Када се то догоди, метода у изведеној класи поништава ону у основној класи. То ће рећи, __init__()у троуглу се даје предност над __init__полигоном.

Генерално, када замењујемо основни метод, ми тежимо да проширимо дефиницију уместо да је једноставно заменимо. Исто се ради позивањем методе у основној класи из оне у изведеној класи (позивање Polygon.__init__()из __init__()ин Triangle).

Боља опција била би употреба уграђене функције super(). Дакле, super().__init__(3)еквивалентно је Polygon.__init__(self,3)и пожељно је. Да бисте сазнали више о super()функцији у Питхону, посетите Питхон супер () функцију.

Две уграђене функције isinstance()и issubclass()користе се за проверу наслеђа.

Функција се isinstance()враћа Trueако је објекат инстанца класе или других класа изведених из ње. Свака класа у Питхону наслеђује од основне класе object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

Слично томе, issubclass()користи се за проверу наслеђивања класе.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

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