Operatøroverbelastning i Python

Operatøroverbelastning i Python
Overbelastning tilsvarer tendensen til en metode eller en operatør til å opptre på flere måter i betydningen programmering, basert på parametrene som er gitt til teknikken eller operandene som operatøren opererer. Operatøroverbelastning betyr at langvarig betydning er gitt over deres forhåndsdefinerte funksjonelle betydning. Python-operatører fungerer for innebygde klasser, men for forskjellige typer fungerer den samme operatøren annerledes. Vi får se hvordan vi kan overbelaste operatøren i Python i denne guiden.

For eksempel kan + -operatøren legge til to tall matematisk, kombinere to lister, eller sammenkoblingsstrenger. Her er et enkelt Python -program for å vise et glimt av + -operatøren som brukes til tillegg og sammenkobling.

Vel, hva kommer hvis vi bruker disse operatørene til objekter i en brukerdefinert klasse? La oss ta følgende program som prøver å simulere et sted i 2-D-dimensjonsordningen. Nedenfor kan du allerede se at fordi Python ikke forsto hvordan du kan bli med i 2 koordinater forekomster, a Type feil genereres.

Vi kan utføre denne oppgaven i Python via overbelastning av operatøren, men først og fremst, la oss forstå de spesielle metodene.

Spesielle magiske metoder

Klassemetoder som starter med Dobbelt understrek klassifiseres i Python som spesielle metoder eller magiske funksjoner. Funksjonene som brukes til å utføre spesifikke aktiviteter. De vanlige metodene vi beskriver for en klasse er ikke slike funksjoner. En av dem ville være __i det_() funksjon vi nevnte ovenfor. Hver gang vi bygger et nytt objekt i den klassen, heter det. Vi vil gjøre vår klassekompatible med innebygde funksjoner via magiske funksjoner. I Python er det flere andre spesielle funksjoner.

Binære eller matematiske operatører

Her er detaljene om de magiske funksjonene for overbelastning av Python Binary eller Mathematical Operators.

Relasjons- eller sammenligningsoperatører

Nedenfor er detaljene om de magiske funksjonene for å overbelaste Python -sammenligningen eller relasjonelle operatører.

Oppdragsoperatører

Her er detaljene om noen magiske funksjoner for overbelastning av oppdragsoperatørene i Python -kode.

Nå er det på tide å skimte et par prøvekoder når vi bruker de magiske metodene som er nevnt ovenfor og overbelaster visse operatører.

Overbelaste de binære eller matematiske operatørene

Eksempel 01: tilleggsoperatør
Du må håndheve __Legg til_() metode i klassen for å overbelaste + operatør. Stor plikt ankommer med stor styrke. Inne i denne metoden kan du gjøre hva du vil. Men det er mye mer rasjonelt å returnere 'Koord ' objekt med koordinatsummen.

Da du prøvde C1 + C2, kaller Python faktisk sin magi .__add __ () -metode som C1.__add __ (c2) eller koord.__add __ (C1, C2).

Eksempel 02: Multiplikasjonsoperatør
På samme måte kan du til og med overbelaste flere binære operatører som bruker magiske funksjoner. I det samme eksemplet ovenfor, mens vi overbelaster multiplikasjonsoperatøren, får vi 2, 6 Som vårt svar på den magiske funksjonen.

Eksempel 03: Subtraksjonsoperatør
Ved hjelp av subtraksjonsoperatøren fikk vi -1, -1 som vårt svar.

Eksempel 04: Strømoperatør
Vi overbelastet makt operatør mens du bruker Power Magic -funksjonen; vi fikk 1, 8.

Eksempel 05: Modulusoperatør
Overbelastning av modulusoperatøren, vi har brukt __mod__ Magisk funksjon for å få modulen.

Du kan også bruke de andre matematiske operatørene, e.g., divisjons- og gulvdivisjonsoperatør, for overbelastning.

Overbelaste sammenligningsoperatørene

Python begrenser ikke overbelastningen av operatører til bare binære eller aritmetiske operatører. Vi er også i stand til å overbelaste sammenligningsoperatører.

Eksempel 01: Mindre enn operatør
Anta at vi krevde mindre enn '<' symbol i vår 'Koord ' Klasse som skal implementeres. La oss sammenligne verdien av disse argumentene fra kilden og gi svaret. Som vanlig kan det brukes. Vi har tre objekter, og vi sammenligner dem i utskriftsuttalelser. Som et resultat vil vi få det objektet C1 er mindre enn C2, Så det gir ut ekte. På den andre siden, C2 og C1 er mer utmerket enn C3; det er grunnen til at begge falske output.

Eksempel 02: Ikke lik operatøren
Nå overbelastet Ikke lik (!=) Sammenligningsoperatør, du vil få ekte i tilfelle av den første og andre utskriftserklæringen fordi den tilfredsstiller betingelsen at begge objektene ikke er like. På den annen side gir objekt 1 det samme som objekt 3, som ikke oppfyller kravet om ikke lik. Det er grunnen til at den tredje utskriftserklæringen utgjør Falsk som et resultat.

Eksempel 03: større enn eller lik operatøren
La oss prøve det samme eksemplet for å overbelaste større enn eller lik til operatør. Når det gjelder den første utskriftserklæringen, har vi det 2> = 13, som er ikke sant; det er derfor det gir usant. I andre og tredje utskriftsuttalelser fikk vi 13> = 2 og 2> = 2, henholdsvis. Begge er ekte som de tilfredsstiller tilstanden til større enn eller tilsvarer.

Prøv den andre sammenligningsoperatørene, e.g., mer viktig enn, lik, 'mindre enn eller lik' i koden din også.

Overbelaste oppdragsoperatørene

Ta en titt på et eksempel på overbelastning av tildelingsoperatøren. Vi tar et lignende eksempel med overbelastning av '-=' Oppdragsoperatør. Vi har definert to objekter som har verdier av Y- og Z -koordinater. Første objekt C1 overfører verdiene sine til 'selv.y ' og 'selv.z ' variabler henholdsvis. På den annen side, objektet C2 overfører verdiene sine til 'annen.y ' og 'annen.z '.

Gjenstand C1 har verdier av selv-.y = 1 og selv-.z = 1 akkurat nå. Objektet C2 verdier 'annen.y = -2 ' og 'annen.z = -3 ' har blitt sendt til trukket fra fra objekt C1 verdier. Som et resultat resulterer C1 - C2 selv-.y - annet.y = 1-(-2) og selv-.Z - Annet.z = 1-(-3). Det beregnede resultatet, som er 3 og 4, har blitt frelst i selv.x 'og' selv.z 'på grunn av tildelingsoperatøren av' =.'På utskrift vil denne koden sende ut resultatet av objekt C1, som har to variabler selv-.y = 3 og selv-.z = 4.

Konklusjon

Vi prøver å dekke alle operatørene i koden din for en bedre forståelse av overbelastning av operatøren.