Piton

Preopterećenje operatora u Pythonu

Preopterećenje operatora u Pythonu
Preopterećenje odgovara tendenciji metode ili operatora da djeluje na više načina u smislu programiranja, na temelju parametara danih tehnici ili operandima na kojima operater djeluje. Preopterećenje operatera znači da se dulje značenje daje iznad njihovog unaprijed definiranog funkcionalnog značaja.  Python operatori funkcioniraju za ugrađene klase, ali za različite tipove isti operater djeluje drugačije. U ovom ćemo vodiču vidjeti kako bismo mogli izvršiti preopterećenje operatora u Pythonu.

Na primjer, operator + može matematički zbrajati dva broja, kombinirati dva popisa ili spajati nizove. Evo jednostavnog python programa koji pokazuje uvid u + operator koji se koristi za dodavanje i spajanje.

Pa, što dolazi ako te operatore koristimo za objekte u a korisnik definiran razred? Uzmimo sljedeći program koji pokušava simulirati mjesto u 2-D shemi dimenzija. Ispod to već možete vidjeti jer Python nije razumio kako se pridružuje 2 instance koordinata, a Upišite pogrešku generira se.

Ovaj zadatak možemo ostvariti u Pythonu putem preopterećenja operatora, ali prije svega, shvatimo posebne metode.

Posebne čarobne metode

Metode klase koje počinju s dvostruko podvlačenje klasificirani su u Pythonu kao posebne metode ili čarobne funkcije. Funkcije koje se koriste za obavljanje određenih aktivnosti. Uobičajene metode koje opisujemo za razred nisu takve funkcije. Jedan od njih bio bi __u tome_() funkcija koju smo gore spomenuli. Svaki put kada izgradimo novi objekt u toj klasi, on se zove. Pomoću čarobnih funkcija pružit ćemo ugrađenim funkcijama usklađenost s razredom. U Pythonu postoji nekoliko drugih posebnih funkcija.

Binarni ili matematički operatori

Ovdje su detalji čarobnih funkcija za preopterećenje bitovih ili matematičkih operatora pythona.

Relacijski operateri ili operateri usporedbe

Ispod su detalji čarobnih funkcija za preopterećenje python usporednih ili relacijskih operatora.

Operatori dodjele

Ovdje su detalji nekih čarobnih funkcija za preopterećenje operatora dodjele u python kodu.

Sada je vrijeme da pogledate nekoliko primjera kodova kada koristimo gore spomenute čarobne metode i preopteretimo određene operatore.

Preopteretite binarne ili matematičke operatore

Primjer 01: Operator sabiranja
Morat ćete provesti __dodati_() metoda u klasi za preopterećenje + operater. Velika dužnost stiže s velikom snagom. Unutar ove metode možete raditi što god želite. Ali mnogo je racionalnije vratiti 'Koordinata objekt koordinatnog zbroja.

Kad ste probali c1 + c2, Python zapravo naziva svoju čaroliju .__dodaj __ () metodu kao c1.__dodaj __ (c2) ili Coord.__dodaj __ (c1, c2).

Primjer 02: Operator množenja
Isto tako, čak možete i preopteretiti nekoliko binarnih operatora pomoću čarobnih funkcija. U istom gornjem primjeru, dok preopterećujemo operator množenja, dobivamo 2, 6 kao naš odgovor na čarobnu funkciju.

Primjer 03: Operator oduzimanja
Koristeći operator oduzimanja, dobili smo -1, -1 kao naš odgovor.

Primjer 04: Operator napajanja
Preopteretili smo vlast operater dok koristi funkciju magije snage; dobili smo 1, 8.

Primjer 05: Operator modula
Preopterećujući operator modula, koristili smo __mod__ čarobna funkcija za dobivanje modula.

Možete koristiti i druge matematičke operatore, npr.g., podjela i podjela ručnika, za preopterećenje.

Preopteretite operatore usporedbe

Python ne ograničava preopterećenje operatora samo na binarne ili aritmetičke operatore. Također smo u mogućnosti preopteretiti operatore usporedbe.

Primjer 01: Manje od operatora
Pretpostavimo da smo tražili manje od '<' symbol u našem 'Koordinata razred koji treba provesti. Usporedimo vrijednost ovih argumenata iz izvora i dajmo odgovor. Kao i obično, može se primijeniti. Imamo tri objekta i uspoređujemo ih u ispisima. Kao rezultat, dobit ćemo taj objekt c1 je manje od c2, pa izlazi Pravi. S druge strane, c2 i c1 jesu izvrsnije od c3; zato oboje False output.

Primjer 02: Nije jednako operateru
Sada preopterećujem Nejednak (!=) dobit ćete operater usporedbe Pravi u slučaju prvog i drugog ispisa jer zadovoljava uvjet da oba objekta nisu jednaka. S druge strane, objekt 1 daje isto što i objekt 3, koji ne udovoljava zahtjevu Nije jednako. Zbog toga izlazi treći ispis Lažno kao rezultat.

Primjer 03: Veći od ili jednak operateru
Pokušajmo na istom primjeru za preopterećenje veći ili jednaki operateru. U slučaju prvog ispisa imamo 2> = 13, koji je nije istina; zato i daje False. U drugom i trećem ispisu dobili smo 13> = 2 i 2> = 2, odnosno. Obojica su Pravi jer zadovoljavaju uvjet veći od ili jednak.

Isprobajte druge operatore usporedbe, npr.g., značajnije od, jednako, "manje ili jednako" u vašem kodu.

Preoptereti operatore dodjele

Pogledajte primjer preopterećenja operatora dodjele. Uzimamo sličan primjer s preopterećenjem '- =' operator dodjele. Definirali smo dva objekta koji imaju vrijednosti y i z koordinata. Prvi objekt c1 prenosi svoje vrijednosti na 'sebe.y ' i 'sebe.z ' varijable. S druge strane, objekt c2 prenosi svoje vrijednosti na 'drugo.y ' i 'drugo.z '.

Objekt c1 ima vrijednosti od sebe.y = 1 i sebe.z = 1 sada. Predmet c2 vrijednosti 'drugo.y = -2 ' i 'drugo.z = -3 ' je proslijeđena oduzeti od predmeta c1 vrijednosti. Kao rezultat, rezultati c1 - c2 sebe.y - drugo.y = 1 - (- 2) i sebe.z - ostalo.z = 1 - (- 3). Izračunati rezultat, koji je 3 i 4, spremljen je u sebe.x 'i' self.z 'zbog operatora dodjele od' =.'Na ispisu će ovaj kôd prikazati rezultat objekta c1 koji ima dvije varijable sebe.y = 3 i sebe.z = 4.

Zaključak

Pokušavamo pokriti sve operatore u vašem kodu radi boljeg razumijevanja preopterećenja operatora.

10 najboljih igara za igranje na Ubuntuu
Windows platforma bila je jedna od dominantnih platformi za igre zbog ogromnog postotka igara koje se danas razvijaju kako bi podržavale Windows. Može...
5 najboljih arkadnih igara za Linux
U današnje vrijeme računala su ozbiljni strojevi koji se koriste za igre na sreću. Ako ne uspijete dobiti novi visoki rezultat, znat ćete na što misli...
Bitka za Wesnoth 1.13.6 Razvoj objavljen
Bitka za Wesnoth 1.13.6 objavljeno prošlog mjeseca, šesto je razvojno izdanje u izdanju 1.13.x series i donosi niz poboljšanja, ponajviše korisničkog ...