Preťaženie metódy:
porovnať reťazec java
Dve alebo viaceré metódy majú rovnaký názov, ale odlišný počet parametrov alebo rôzne typy parametrov, prípadne oboje. Tieto metódy sa nazývajú preťažené metódy a toto sa nazýva metóda preťaženie .
Podobne ako v iných jazykoch (napr. preťaženie metódy v C++ ) do, python štandardne nepodporuje preťaženie metódy. Existujú však rôzne spôsoby, ako dosiahnuť preťaženie metódy v Pythone.
Problém s preťažením metód v Pythone je v tom, že môžeme preťažiť metódy, ale môžeme použiť iba najnovšiu definovanú metódu.
Python3
# First product method.> # Takes two argument and print their> # product> def> product(a, b):> >p>=> a>*> b> >print>(p)> # Second product method> # Takes three argument and print their> # product> def> product(a, b, c):> >p>=> a>*> b>*>c> >print>(p)> # Uncommenting the below line shows an error> # product(4, 5)> # This line will call the second product method> product(>4>,>5>,>5>)> |
>
>Výkon
100>
Vo vyššie uvedenom kóde sme definovali dve metódy produktu, môžeme použiť iba druhú metódu produktu, pretože python nepodporuje preťaženie metódy. Môžeme definovať mnoho metód rovnakého mena a rôznych argumentov, ale môžeme použiť len poslednú definovanú metódu. Volanie inej metódy spôsobí chybu. Ako tu voláte produkt (4,5) spôsobí chybu, pretože posledná definovaná metóda produktu vyžaduje tri argumenty.
Na prekonanie vyššie uvedeného problému teda môžeme použiť rôzne spôsoby, ako dosiahnuť preťaženie metódy.
Metóda 1 (nie najefektívnejšia metóda):
Argumenty môžeme použiť na to, aby tá istá funkcia fungovala odlišne, t. j. podľa argumentov.
Python3
# Function to take multiple arguments> def> add(datatype,>*>args):> ># if datatype is int> ># initialize answer as 0> >if> datatype>=>=> 'int'>:> >answer>=> 0> ># if datatype is str> ># initialize answer as ''> >if> datatype>=>=> 'str'>:> >answer>=> ''> ># Traverse through the arguments> >for> x>in> args:> ># This will do addition if the> ># arguments are int. Or concatenation> ># if the arguments are str> >answer>=> answer>+> x> >print>(answer)> # Integer> add(>'int'>,>5>,>6>)> # String> add(>'str'>,>'Hi '>,>'Geeks'>)> |
>
>Výkon
11 Hi Geeks>
Metóda 2 (nie je účinná):
Preťaženie metódy v pythone môžeme dosiahnuť pomocou užívateľom definovanej funkcie žiadne kľúčové slovo ako predvolený parameter.
Vysvetlenie kódu:
Prvý parameter metódy pridávania je nastavený na Žiadne. To nám dá možnosť zavolať ho s parametrom alebo bez neho.
Keď odovzdáme argumenty metóde add (Working):
- Metóda kontroluje, či sú k dispozícii oba parametre alebo nie.
- Keďže sme už zadali predvolené hodnoty parametrov ako None, ak niektorá z hodnôt neprejde, zostane None.
- Pomocou príkazov If-Else môžeme dosiahnuť preťaženie metódy kontrolou každého parametra ako jedného príkazu.
Python3
# code> def> add(a>=>None>, b>=>None>):> ># Checks if both parameters are available> ># if statement will be executed if only one parameter is available> >if> a !>=> None> and> b>=>=> None>:> >print>(a)> ># else will be executed if both are available and returns addition of two> >else>:> >print>(a>+>b)> # two arguments are passed, returns addition of two> add(>2>,>3>)> # only one argument is passed, returns a> add(>2>)> |
>
>Výkon
5 2>
Problém s vyššie uvedenými metódami je v tom, že kód je zložitejší s viacerými príkazmi if/else a nie je to požadovaný spôsob, ako dosiahnuť preťaženie metódy.
Metóda 3 (účinná jedna):
Pomocou viacnásobného odosielacieho dekorátora
Dekoratér s viacerými zásielkami môže byť inštalovaný:
pip3 install multipledispatch>
Ak pip nie je nainštalovaný na vašom zariadení:
Kliknite sem pre systém Windows
Kliknite sem pre Linux
Python3
from> multipledispatch>import> dispatch> # passing one parameter> @dispatch>(>int>,>int>)> def> product(first, second):> >result>=> first>*>second> >print>(result)> # passing two parameters> @dispatch>(>int>,>int>,>int>)> def> product(first, second, third):> >result>=> first>*> second>*> third> >print>(result)> # you can also pass data type of any value as per requirement> @dispatch>(>float>,>float>,>float>)> def> product(first, second, third):> >result>=> first>*> second>*> third> >print>(result)> # calling product method with 2 arguments> product(>2>,>3>)># this will give output of 6> # calling product method with 3 arguments but all int> product(>2>,>3>,>2>)># this will give output of 12> # calling product method with 3 arguments but all float> product(>2.2>,>3.4>,>2.3>)># this will give output of 17.985999999999997> |
azúrové predplatné
>
>
Výkon:
6 12 17.985999999999997>
V Backende Dispatcher vytvorí objekt, ktorý ukladá inú implementáciu a za behu vyberie vhodnú metódu ako typ a počet odovzdaných parametrov.