Piton

Supraîncărcarea operatorului în Python

Supraîncărcarea operatorului în Python
Supraîncărcarea corespunde tendinței unei metode sau a unui operator de a acționa în mai multe moduri în sensul programării, pe baza parametrilor furnizați tehnicii sau operanzilor pe care operează operatorul. Supraîncărcarea operatorului înseamnă că semnificația prelungită este dată peste semnificația funcțională predefinită.  Operatorii Python funcționează pentru clasele încorporate, dar pentru diferite tipuri, același operator acționează diferit. Vom vedea cum putem face supraîncărcarea operatorului în Python în acest ghid.

De exemplu, operatorul + poate adăuga matematic două numere, poate combina două liste sau poate concatena șiruri. Iată un program simplu Python pentru a arăta o privire asupra operatorului + utilizat pentru adăugare și concatenare.

Ei bine, ce se întâmplă dacă folosim acești operatori pentru obiecte dintr-un definite de utilizator clasă? Să luăm următorul program care încearcă să simuleze un punct în schema 2-D a dimensiunilor. Mai jos, puteți vedea deja acest lucru, deoarece Python nu a înțeles cum să se alăture 2 instanțe de coordonate, a Eroare de scris este generată.

Putem realiza această sarcină în Python prin supraîncărcarea operatorului, dar în primul rând, să înțelegem metodele speciale.

Metode magice speciale

Metode de clasă începând cu subliniere dublă sunt clasificate în Python ca metode speciale sau funcții magice. Funcțiile care sunt utilizate pentru a desfășura activități specifice. Metodele obișnuite pe care le descriem pentru o clasă nu sunt astfel de funcții. Unul dintre ei ar fi __init_ () funcție am menționat mai sus. De fiecare dată când construim un obiect nou în acea clasă, se numește. Vom transforma funcțiile încorporate în conformitate cu clasa noastră prin funcții magice. În Python, există și alte câteva funcții speciale.

Operatori binari sau matematici

Iată detaliile funcțiilor magice pentru supraîncărcarea operatorilor binari sau matematici python.

Operatori relaționali sau de comparație

Mai jos sunt detaliile funcțiilor magice pentru supraîncărcarea comparației python sau a operatorilor relaționali.

Operatori de misiune

Iată detaliile unor funcții magice pentru supraîncărcarea operatorilor de atribuire în cod python.

Acum, este timpul să vedem câteva exemple de coduri atunci când folosim metodele magice menționate mai sus și supraîncărcăm anumiți operatori.

Suprasolicitați operatorii binari sau matematici

Exemplul 01: Operator de adăugare
Va trebui să aplicați __adăuga_() metodă din clasă pentru supraîncărcare + operator. Marea datorie ajunge cu mare putere. În interiorul acestei metode, puteți face orice doriți. Dar este mult mai rațional să returnămCoord ' obiect al sumei de coordonate.

Când ați încercat c1 + c2, Python își numește de fapt magia .__add __ () metoda ca c1.__add __ (c2) sau Coord.__add __ (c1, c2).

Exemplul 02: Operator de multiplicare
La fel, puteți chiar supraîncărca mai mulți operatori binari folosind funcții magice. În același exemplu de mai sus, în timp ce supraîncărcăm operatorul de multiplicare, obținem 2, 6 ca răspunsul nostru la funcția magică.

Exemplul 03: Operator de scădere
Folosind operatorul de scădere, am obținut -1, -1 ca răspunsul nostru.

Exemplul 04: Operator electric
Am suprasolicitat putere operator în timp ce utilizează funcția magie de putere; avem 1, 8.

Exemplul 05: Operator de modul
Pentru supraîncărcarea operatorului de modul, am folosit __mod__ funcție magică pentru a obține modulul.

Puteți utiliza și ceilalți operatori matematici, e.g., operator de diviziune și divizare la etaj, pentru supraîncărcare.

Suprasolicitați operatorii de comparație

Python nu restricționează supraîncărcarea operatorilor doar la operatori binari sau aritmetici. De asemenea, putem supraîncărca operatorii de comparație.

Exemplul 01: Mai puțin decât Operator
Să presupunem că am solicitat mai puțin decât '<' symbol în a noastră 'Coord ' clasa de implementat. Să comparăm valoarea acestor argumente din sursă și să oferim răspunsul. Ca de obicei, poate fi aplicat. Avem trei obiecte și le comparăm în declarații tipărite. Ca rezultat, vom obține acel obiect c1 este Mai puțin decât c2, deci rezultă Adevărat. Pe de altă parte, c2 și c1 sunteți mai excelent decât c3; de aceea ambele rezultate false.

Exemplul 02: Nu este egal cu operatorul
Acum suprasolicitați Nu este egal (!=) operator de comparație, veți obține Adevărat în cazul primei și celei de-a doua instrucțiuni de tipărire deoarece îndeplinește condiția ca ambele obiecte să nu fie egale. Pe de altă parte, obiectul 1 dă același lucru ca și obiectul 3, care nu îndeplinește cerința Nu este egal. Acesta este motivul pentru care a treia declarație de tipărire rezultă Fals ca urmare.

Exemplul 03: mai mare decât sau egal cu operatorul
Să încercăm același exemplu pentru supraîncărcarea fișierului mai mare sau egal la operator. În cazul primei declarații tipărite, avem 2> = 13, care este neadevarat; de aceea produce False. În a doua și a treia declarație tipărită, am primit 13> = 2 și 2> = 2, respectiv. Ambele sunt Adevărat întrucât satisfac condiția mai mare decât sau egală cu.

Încercați ceilalți operatori de comparație, e.g., mai semnificativ decât, egal cu, „mai mic sau egal cu” în codul dvs., de asemenea.

Supraîncărcați operatorii de atribuire

Aruncați o privire la un exemplu de supraîncărcare a operatorului de atribuire. Luăm un exemplu similar cu supraîncărcarea fișierului '- =' operator de misiune. Am definit două obiecte având valori de coordonate y și z. Primul obiect c1 își transmite valorile către 'de sine.tu și 'de sine.z ' variabile, respectiv. Pe de altă parte, obiectul c2 își transmite valorile către 'alte.tu și 'alte.z '.

Obiect c1 are valori de de sine.y = 1 și de sine.z = 1 chiar acum. Obiectul c2 valori 'alte.y = -2 ' și 'alte.z = -3 ' a fost trecut la scăzut din obiect c1 valori. Ca rezultat, rezultă c1 - c2 de sine.y - altul.y = 1 - (- 2) și de sine.z - altele.z = 1 - (- 3). Rezultatul calculat, care este 3 și 4, a fost salvat în „sine”.x 'și' sinele.z 'datorită operatorului de atribuire a' =.„La tipărire, acest cod va genera rezultatul obiectului c1, care are două variabile de sine.y = 3 și de sine.z = 4.

Concluzie

Încercăm să acoperim toți operatorii din codul dvs. pentru o mai bună înțelegere a supraîncărcării operatorului.

Cum să capturați și să transmiteți în flux sesiunea de jocuri pe Linux
În trecut, jocurile erau considerate doar un hobby, dar cu timpul industria jocurilor a cunoscut o creștere imensă în ceea ce privește tehnologia și n...
Cele mai bune jocuri pentru a juca cu urmărirea manuală
Oculus Quest a introdus recent marea idee de urmărire manuală fără controlere. Cu un număr din ce în ce mai mare de jocuri și activități care execută ...
Cum se afișează suprapunerea OSD în aplicații și jocuri Linux pe ecran complet
Jucarea jocurilor pe ecran complet sau utilizarea aplicațiilor în modul ecran complet fără distragere vă poate elimina din informațiile relevante ale ...