На пример, оператор + може математички додати два броја, комбиновати две листе или повезати низове. Ево једноставног питхон програма који показује увид у + оператор који се користи за додавање и спајање.
Па, шта долази ако ове операторе користимо за објекте у а кориснички дефинисано класа? Узмимо следећи програм који покушава да симулира тачку у 2-Д шеми димензија. Испод то већ можете видети јер Питхон није разумео како да споји 2 инстанце координата, а Упишите грешку се генерише.
Овај задатак можемо остварити у Питхону преко преоптерећења оператора, али пре свега, хајде да разумемо посебне методе.
Посебне магијске методе
Методе класе које почињу са двоструко подвлачење класификују се у Питхону као посебне методе или магијске функције. Функције које се користе за обављање одређених активности. Уобичајене методе које описујемо за класу нису такве функције. Један од њих би био __у томе_() функција коју смо горе поменули. Сваки пут када направимо нови објекат у тој класи, он се зове. Наше уграђене функције учинићемо компатибилним са класама помоћу магичних функција. У Питхону постоји неколико других посебних функција.
Бинарни или математички оператори
Ево детаља о магијским функцијама за преоптерећење битових или математичких оператора питхона.
Релациони оператери или оператери поређења
Испод су детаљи чаробних функција за преоптерећење питхон упоредних или релационих оператора.
Оператори доделе
Ево детаља о неким магичним функцијама за преоптерећење оператора доделе у питхон коду.
Сада је време да погледате неколико примера кодова када користимо горе поменуте магијске методе и преоптеретимо одређене операторе.
Преоптеретите бинарне или математичке операторе
Пример 01: Оператор сабирања
Мораћете да примените __додати_() метода у класи за преоптерећење + оператер. Велика дужност стиже са великом снагом. Унутар ове методе можете радити све што желите. Али много је рационалније вратити 'Цоорд ' објект координатног збира.
Када сте пробали ц1 + ц2, Питхон заправо назива своју магију .__додај __ () метод као ц1.__додај __ (ц2) или Цоорд.__додај __ (ц1, ц2).
Пример 02: Оператор множења
Исто тако, чак можете и преоптеретити неколико бинарних оператора помоћу магичних функција. У истом горњем примеру, док преоптерећујемо оператор множења, добијамо 2, 6 као наш одговор на магијску функцију.
Пример 03: Оператор одузимања
Користећи оператор одузимања, добили смо -1, -1 као наш одговор.
Пример 04: Оператер напајања
Преоптеретили смо снага оператер док користи функцију повер магиц; имамо 1, 8.
Пример 05: Оператор модула
Преоптерећујући оператор модула, користили смо __мод__ магична функција за добијање модула.
Такође можете да користите друге математичке операторе, нпр.г., руковач и подела пода, за преоптерећење.
Преоптеретите операторе упоређивања
Питхон не ограничава преоптерећење оператора само на бинарне или аритметичке операторе. Такође смо у могућности да преоптеретимо операторе поређења.
Пример 01: Мање од оператора
Претпоставимо да смо захтевали мање од '<' symbol у нашем 'Цоорд ' класа која се спроводи. Упоредимо вредност ових аргумената из извора и даћемо одговор. Као и обично, може се применити. Имамо три објекта и упоређујемо их у изјавама за штампу. Као резултат, добићемо тај објекат ц1 је мање него ц2, па излази Истинито. С друге стране, ц2 и ц1 су изврсније него ц3; зато обоје Фалсе оутпут.
Пример 02: Није једнако оператеру
Сада преоптерећујем Није једнако (!=) упоређивач, добићете Истинито у случају првог и другог исписа исказа јер задовољава услов да оба објекта нису једнака. С друге стране, објекат 1 даје исто што и објекат 3, који не испуњава захтев Није једнако. Због тога излази трећа изјава за штампу Нетачно као резултат.
Пример 03: Већи од или једнак оператеру
Покушајмо са истим примером за преоптерећење веће или једнако оператеру. У случају прве изјаве за штампу имамо 2> = 13, која је није истина; зато и даје Фалсе. У другој и трећој штампаној изјави смо добили 13> = 2 и 2> = 2, редом. Обоје смо Истинито пошто задовољавају услов већи од или једнак.
Испробајте друге операторе поређења, нпр.г., значајније од, једнако, „мање или једнако“ у вашем коду.
Преоптерети операторе додељивања
Погледајте пример преоптерећења оператора доделе. Узимамо сличан пример са преоптерећењем '- =' оператер доделе. Дефинисали смо два објекта који имају вредности и и з координата. Први објекат ц1 преноси своје вредности на 'себе.и ' и 'себе.з ' променљиве, односно. С друге стране, објекат ц2 преноси своје вредности на 'друго.и ' и 'друго.з '.
Предмет ц1 има вредности од себе.и = 1 и себе.з = 1 одмах. Објекат ц2 вредности 'друго.и = -2 ' и 'друго.з = -3 ' је прослеђено одузети од објекта ц1 вредности. Као резултат, резултат ц1 - ц2 себе.и - друго.и = 1 - (- 2) и себе.з - друго.з = 1 - (- 3). Израчунати резултат, који је 3 и 4, сачуван је у себи.к 'и' селф.з 'због оператора доделе од' =.'На испису, овај код ће дати резултат објекта ц1, који има две променљиве себе.и = 3 и себе.з = 4.
Закључак
Покушавамо да покријемо све операторе у вашем коду ради бољег разумевања преоптерећења оператора.