Například operátor + může matematicky přidat dvě čísla, kombinovat dva seznamy nebo zřetězit řetězce. Zde je jednoduchý program v pythonu, který ukazuje letmý pohled na operátor + použitý pro sčítání a zřetězení.
Co přijde, když použijeme tyto operátory pro objekty v a definované uživatelem třída? Vezměme si následující program, který se pokusí simulovat bod ve 2D schématu rozměrů. Níže to již vidíte, protože Python nerozuměl tomu, jak se připojit ke 2 instancím souřadnic, a Chyba typu je generován.
Můžeme provést tento úkol v Pythonu přes přetížení operátora, ale nejprve pochopíme speciální metody.
Speciální magické metody
Třída metody začínající dvojité podtržítko jsou v Pythonu klasifikovány jako speciální metody nebo magické funkce. Funkce, které se používají k provádění konkrétních činností. Obvyklé metody, které pro třídu popisujeme, nejsou takovými funkcemi. Jedním z nich by byl __init_ () funkce, kterou jsme zmínili výše. Kdykoli postavíme nový objekt v této třídě, volá se to. Prostřednictvím magických funkcí vykreslíme naši třídu kompatibilní s vestavěnými funkcemi. V Pythonu existuje několik dalších speciálních funkcí.
Binární nebo matematické operátory
Tady jsou podrobnosti o magických funkcích pro přetížení binárních nebo matematických operátorů pythonu.
Relační nebo srovnávací operátoři
Níže jsou uvedeny podrobnosti o magických funkcích pro přetížení porovnávacích nebo relačních operátorů pythonu.
Operátoři přiřazení
Tady jsou podrobnosti o některých magických funkcích pro přetížení operátorů přiřazení v kódu pythonu.
Nyní je čas zahlédnout pár ukázkových kódů, když použijeme výše uvedené magické metody a přetížíme určité operátory.
Přetížit binární nebo matematické operátory
Příklad 01: Operátor přidání
Budete muset vymáhat __přidat_() metoda ve třídě k přetížení + operátor. Velká povinnost přichází s velkou silou. Uvnitř této metody můžete dělat, co chcete. Je však mnohem racionálnější vrátit 'Coord ' objekt souřadnicového součtu.
Když jste zkusili c1 + c2, Python vlastně nazývá svou magii .__add __ () metoda jako c1.__add __ (c2) nebo Coord.__add __ (c1, c2).
Příklad 02: Operátor násobení
Podobně můžete pomocí magických funkcí dokonce přetížit několik binárních operátorů. Ve stejném příkladu výše, při přetížení operátoru násobení, dostaneme 2, 6 jako naše odpověď na magickou funkci.
Příklad 03: Operátor odčítání
Pomocí operátoru odčítání jsme dostali -1, -1 jako naše odpověď.
Příklad 04: Energetický operátor
Přetížili jsme Napájení operátor při používání funkce power magic; máme 1, 8.
Příklad 05: Operátor modulu
Přetížení operátora modulu jsme použili __mod__ magická funkce pro získání modulu.
Můžete také použít jiné matematické operátory, např.G., operátor dělení a dělení podlahy, pro přetížení.
Přetížit operátory porovnání
Python neomezuje přetížení operátorů pouze na binární nebo aritmetické operátory. Jsme také schopni přetížit operátory porovnání.
Příklad 01: Méně než operátor
Předpokládejme, že požadujeme méně než ''<' symbol v našem 'Coord ' třída, která má být implementována. Porovnejme hodnotu těchto argumentů ze zdroje a získáme odpověď. Jako obvykle lze použít. Máme tři objekty a porovnáváme je v tiskových prohlášeních. Ve výsledku tento objekt dostaneme c1 je méně než c2, takže výstupy Skutečný. Na druhou stranu, c2 a c1 jsou vynikající než c3; proto oba falešné výstupy.
Příklad 02: Nerovná se operátorovi
Nyní přetížení Nerovná se (!=) operátor porovnání, dostanete Skutečný v případě prvního a druhého tiskového příkazu, protože splňuje podmínku, že oba objekty nejsou stejné. Na druhé straně objekt 1 poskytuje stejné výsledky jako objekt 3, který nesplňuje požadavek nerovná se. Proto jsou výstupy třetího tiskového prohlášení Nepravdivé jako výsledek.
Příklad 03: Větší než nebo rovné operátorovi
Zkusme stejný příklad přetížení větší nebo rovno operátorovi. V případě prvního tiskového prohlášení máme 2> = 13, který je není pravda; proto dává False. Ve druhém a třetím tiskovém prohlášení jsme se dostali 13> = 2 a 2> = 2, resp. Oba jsou Skutečný protože splňují podmínku větší než nebo rovno.
Zkuste další operátory porovnání, např.G., významnější než, rovno, 'menší než nebo rovno', také v kódu.
Přetížit operátory přiřazení
Podívejte se na příklad přetížení operátoru přiřazení. Bereme podobný příklad s přetížením '- =' operátor přiřazení. Definovali jsme dva objekty s hodnotami souřadnic y a z. První objekt c1 předává své hodnoty 'já.y ' a 'já.z ' proměnné. Na druhou stranu objekt c2 předává své hodnoty 'jiný.y ' a 'jiný.z '.
Objekt c1 má hodnoty já.y = 1 a já.z = 1 právě teď. Objekt c2 hodnoty 'jiný.y = -2 ' a 'jiný.z = -3 ' bylo předáno odečteno z objektu c1 hodnoty. Výsledkem jsou výsledky c1 - c2 já.y - ostatní.y = 1 - (- 2) a já.z - ostatní.z = 1 - (- 3). Vypočítaný výsledek, který je 3 a 4, byl uložen do sebe.x 'a' já.z 'kvůli operátorovi přiřazení' =.„Při tisku tento kód vygeneruje výsledek objektu c1, který má dvě proměnné já.y = 3 a já.z = 4.
Závěr
Snažíme se ve vašem kódu pokrýt všechny operátory, abychom lépe porozuměli přetížení operátorů.