Przeładowanie operatorów. Po co to jest potrzebne? Jakie ma zastosowania

0

Witam, ucze się Pythona i momentalnie stał się moim głównym językiem.
Natrafiłem na przeładowanie operatorów, nie mogę tego za Chiny pojąć po co to jest wgl potrzebne. Może mi ktoś udzielić odpowiedzi na to pytanie?
Pozdrawiam

4

Wyobraź sobie, że napisałeś własną klasę, np Vector2D

v1 = Vector2D(2,3)
v2 = Vector2D(3,4)

Dzięki przeładowaniu operatorów możesz np dodać dwa wektory do siebie używając symbolu '+'

v3 = v1 + v2
0

To, dodam jeszcze, chyba najbardziej podstawowy przykład

2 + 2 # Operator + na obiektach typu int to operacja arytmetyczne
'a' + 'b' # Operator + na obiektach typu str to konkatenacja
0

Ale przeładowanie chyba może też zmniejszyć czytelność programu. Jeśli to są jakieś nieoczywiste klasy to nie wiadomo co taki plus czy minus robi albo można się pomylić prawda?

0

Przeładowanie to ułatwienie, np. chcesz sobie połączyć stringi, czyli tekst hello z world, i robisz "hello" + " "+ "world" i masz.

Sam zrozumiesz, że łączenie tekstów to dodawanie, mnożenie to mnożenie.

To jest ułatwienie jak dla mnie, to co po angielsku na zwiesz i wiesz, że można coś takiego z tym zrobić to się skapniesz, a jak nie to się nauczysz.

0
Błękitny Kret napisał(a):

Ale przeładowanie chyba może też zmniejszyć czytelność programu. Jeśli to są jakieś nieoczywiste klasy to nie wiadomo co taki plus czy minus robi albo można się pomylić prawda?

Według mnie nie. Czemu mniej czytelne jest a + b od a.add(b) ?

0

Jak widzisz a + b to zakładasz że a nie jest modyfikowane a co jeśli ktoś przeciąży w ten sposób że będzie albo w taki sposób że a + b nie będzie równe b + a to też może wprowadzać w błąd. Albo jak ktoś przeciąży operatory dzielenia czy mnożenia to nie wiadomo co chce osiągnąć dzieląc jeden obiekt przez drugi itd.

0

Nikt nawet by nie wiedział, że taki obiekt istnieje, ale jakby zajrzał do dokumentacji, to by widział, że takie coś jest i ma takie i taki opcje, a nawet operatory.

0
Błękitny Kret napisał(a):

Jak widzisz a + b to zakładasz że a nie jest modyfikowane co jeśli ktoś przeciąży w ten sposób że będzie

I dlatego nie powinno się tak przeciążać, a co jak ktoś stworzy metodę, która coś usuwa i da jej nazwę add?

Błękitny Kret napisał(a):

a co jeśli ktoś przeciąży w ten sposób że będzie albo w taki sposób że a + b nie będzie równe b + a to też może wprowadzać w błąd.

'a' + 'b' daje inny wynik niż 'b' + 'a' i dla wszystkich jest to intuicyjne

Błękitny Kret napisał(a):

Albo jak ktoś przeciąży operatory dzielenia czy mnożenia to nie wiadomo co chce osiągnąć dzieląc jeden obiekt przez drugi itd.

Czemu w tym przypadku nie wiedział byś o co chodzi a w takim było by dla ciebie jasne: a.multipl(b), a.divide(b)?

1 użytkowników online, w tym zalogowanych: 0, gości: 1