Przeciążenie operatora w Python

Przeciążenie operatora w Python
Przeciążenie odpowiada tendencji metody lub operatora do działania na wiele sposobów w sensie programowania, w oparciu o parametry dostarczone do techniki lub operandów, na których działa operator. Przeciążenie operatora oznacza, że ​​przedłużone znaczenie jest podane powyżej ich predefiniowanego istotności funkcjonalnej. Operatorzy Python funkcjonują dla wbudowanych klas, ale dla różnych typów ten sam operator działa inaczej. Zobaczymy, w jaki sposób możemy przeciążyć przeciążenie operatora w Python w tym przewodniku.

Na przykład operator + może matematycznie dodać dwie liczby, łączyć dwie listy lub ciągnięcia łączące. Oto prosty program Python, który pokazuje spojrzenie operatora + używanego do dodawania i konatenacji.

Cóż, co przychodzi, jeśli używamy tych operatorów do obiektów w określony przez użytkownika klasa? Weźmy następujący program, który próbuje symulować miejsce w schemacie wymiarów 2D. Poniżej możesz to już zobaczyć, ponieważ Python nie rozumiał, jak dołączyć do 2 współrzędnych instancji, a Wpisz błąd jest wygenerowany.

Możemy wykonać to zadanie w Pythonie poprzez przeciążenie operatora, ale przede wszystkim zrozummy specjalne metody.

Specjalne metody magiczne

Metody klasowe zaczynające się od Podwójne podkreślenie są klasyfikowane w Python jako specjalne metody lub funkcje magiczne. Funkcje używane do wykonywania określonych czynności. Zwykłe metody, które opisujemy dla klasy, nie są takie funkcje. Jednym z nich byłby __w tym_() funkcja, o której wspomnialiśmy powyżej. Za każdym razem, gdy budujemy nowy obiekt w tej klasie, nazywa się to. Umożliwimy nasze zgodne z klasą funkcje za pośrednictwem magicznych funkcji. W Python istnieje kilka innych specjalnych funkcji.

Operatorzy binarni lub matematyczni

Oto szczegóły funkcji magicznych do przeciążenia operatorów binarnych lub matematycznych Python.

Operatorzy relacyjni lub porównawcze

Poniżej znajdują się szczegóły funkcji magicznych do przeciążenia operatorów porównawczych Python lub relacyjnych.

Operatorzy zadań

Oto szczegóły niektórych funkcji magii do przeciążenia operatorów przypisania w kodzie Python.

Teraz nadszedł czas, aby zobaczyć kilka przykładowych kodów, gdy używamy magicznych metod wymienionych powyżej i przeciążenie niektórych operatorów.

Przeładować operatorów binarnych lub matematycznych

Przykład 01: Operator dodawania
Będziesz musiał egzekwować __dodać_() metoda w klasie, aby przeciążyć + operator. Wielki obowiązek przybywa z wielką siłą. W tej metodzie możesz zrobić wszystko, co chcesz. Ale zwracanie do nich jest o wiele bardziej racjonalneKoordynować obiekt suma współrzędnych.

Kiedy próbowałeś C1 + C2, Python faktycznie nazywa swoją magię .__add __ () metoda jako C1.__add __ (c2) lub koordynować.__add __ (c1, c2).

Przykład 02: Operator mnożenia
Podobnie możesz nawet przeciążyć kilku operatorów binarnych za pomocą magicznych funkcji. W tym samym powyższym przykładzie, przeciążając operator mnożenia, otrzymujemy 2, 6 Jako nasza odpowiedź na funkcję magii.

Przykład 03: Operator odejmowania
Korzystając z operatora odejmowania, otrzymaliśmy -1, -1 Jako nasza odpowiedź.

Przykład 04: Operator zasilania
Przeciążliśmy moc Operator podczas korzystania z funkcji Magii Power; mamy 1, 8.

Przykład 05: Operator modułu
Przeciążając operator modułu, użyliśmy __mod__ Magic Funkcja, aby uzyskać moduł.

Możesz także użyć innych operatorów matematycznych, e.G., Operator podziału i działu podłogowego, do przeciążenia.

Przeładuj operatorów porównawczych

Python nie ogranicza przeciążenia operatorów do operatorów binarnych lub arytmetycznych. Jesteśmy również w stanie przeciążyć operatorów porównawczych.

Przykład 01: mniej niż operator
Załóżmy, że potrzebowaliśmy mniej niż '<' symbol w naszym 'Koordynować klasa do wdrożenia. Porównajmy wartość tych argumentów ze źródła i dajmy odpowiedź. Jak zwykle można go zastosować. Mamy trzy obiekty i porównujemy je w instrukcjach drukowanych. W rezultacie otrzymamy ten obiekt C1 Jest mniej niż C2, Więc wysyła PRAWDA. Z drugiej strony, C2 I C1 Czy bardziej doskonałe niż c3; Dlatego oba fałszywe wyjście.

Przykład 02: Nie jest równy operatorowi
Teraz przeciążanie Nie równe (!=) Operator porównawczy, otrzymasz PRAWDA W przypadku pierwszego i drugiego instrukcji drukowania, ponieważ spełnia warunki, że oba obiekty nie są równe. Z drugiej strony obiekt 1 daje tak samo co obiekt 3, który nie spełnia wymagania nie równego. Dlatego trzecia instrukcja drukowania wychodzi FAŁSZ w rezultacie.

Przykład 03: większy lub równy operatorowi
Wypróbujmy ten sam przykład do przeciążenia większe lub równe do operatora. W przypadku pierwszego instrukcji drukowania mamy 2> = 13, który jest nie prawda; Dlatego daje to fałszywe. W drugim i trzecim oświadczeniach drukowania otrzymaliśmy 13> = 2 I 2> = 2, odpowiednio. Oba są PRAWDA ponieważ spełniają stan większej lub równej.

Wypróbuj innych operatorów porównawczych, e.G., bardziej znaczące niż, równe, „mniejsze lub równe”, również w twoim kodzie.

Przeładuj operatorów przypisania

Spójrz na przykład przeciążenia operatora przypisania. Przyjmujemy podobny przykład z przeciążeniem '-=' operator przypisania. Zdefiniowaliśmy dwa obiekty o wartości współrzędnych Y i Z. Pierwszy obiekt C1 przekazuje swoje wartości do 'samego siebie.y ' I 'samego siebie.z ' odpowiednio zmienne. Z drugiej strony obiekt C2 przekazuje swoje wartości do 'Inny.y ' I 'Inny.z '.

Obiekt C1 ma wartości samego siebie.y = 1 I samego siebie.Z = 1 już teraz. Obiekt C2 wartości 'Inny.y = -2 ' I 'Inny.Z = -3 ' został przekazany odejmowane z obiektu C1 wartości. W rezultacie wyniki C1 - C2 samego siebie.y - Inne.y = 1-(-2) I samego siebie.Z - Inne.Z = 1-(-3). Obliczony wynik, który wynosi 3 i 4, został zapisany w „jaźń.X 'i „jaźń.Z 'Z powodu operatora przypisania' =.„W wydruku ten kod wyświetli wynik obiektu C1, który ma dwie zmienne samego siebie.y = 3 I samego siebie.Z = 4.

Wniosek

Staramy się pokryć wszystkich operatorów w twoim kodzie, aby lepiej zrozumieć przeciążenie operatora.