Menetelmän ylikuormitus:
merkkijono char javassa
Kahdella tai useammalla menetelmällä on sama nimi, mutta eri määrä parametreja tai erityyppisiä parametreja tai molempia. Näitä menetelmiä kutsutaan ylikuormitetuiksi menetelmiksi ja tätä kutsutaan menetelmäksi ylikuormitus .
Kuten muutkin kielet (esim. menetelmän ylikuormitus C++:ssa ) tehdä, python ei tue oletusarvoisesti menetelmän ylikuormitusta. Mutta on olemassa erilaisia tapoja saavuttaa menetelmän ylikuormitus Pythonissa.
Pythonin menetelmän ylikuormituksen ongelmana on, että voimme ylikuormittaa menetelmiä, mutta voimme käyttää vain viimeisintä määritettyä menetelmää.
Python 3
# 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>)> |
>
>Lähtö
100>
Yllä olevassa koodissa olemme määrittäneet kaksi tuotemenetelmää, joista voimme käyttää vain toista tuotemenetelmää, koska python ei tue menetelmän ylikuormitusta. Voimme määrittää monia samannimistä ja eri argumentteja omaavia menetelmiä, mutta voimme käyttää vain viimeisintä määritettyä menetelmää. Toisen menetelmän kutsuminen aiheuttaa virheen. Kuten täällä soitellaan tuote(4,5) tuottaa virheen, koska viimeksi määritetty tuotemenetelmä vaatii kolme argumenttia.
Siten yllä olevan ongelman voittamiseksi voimme käyttää erilaisia tapoja saavuttaa menetelmän ylikuormitus.
Menetelmä 1 (ei tehokkain menetelmä):
Voimme käyttää argumentteja saadakseen saman funktion toimimaan eri tavalla eli argumenttien mukaisesti.
Python 3
# 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'>)> |
>
>Lähtö
11 Hi Geeks>
Menetelmä 2 (ei tehokas):
Pythonissa voidaan saavuttaa menetelmän ylikuormitus käyttäjän määrittämillä funktioilla Ei mitään avainsana oletusparametriksi.
Koodin selitys:
Lisää-menetelmän ensimmäiseksi parametriksi asetetaan Ei mitään. Tämä antaa meille mahdollisuuden kutsua sitä parametrin kanssa tai ilman.
Kun välitämme argumentteja add-menetelmään (toimii):
- Menetelmä tarkistaa, ovatko molemmat parametrit saatavilla vai eivät.
- Koska olemme jo antaneet oletusparametrien arvoiksi Ei mitään, jos jotakin arvoista ei välitetä, se pysyy Ei mitään.
- If-Else-lauseita käyttämällä voimme saavuttaa menetelmän ylikuormituksen tarkistamalla jokaisen parametrin yhtenä lauseena.
Python 3
# 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>)> |
merkkijono int javaan
>
>Lähtö
5 2>
Yllä olevien menetelmien ongelmana on, että se tekee koodista monimutkaisempaa useilla if/else-lauseilla, eikä se ole haluttu tapa saavuttaa menetelmän ylikuormitus.
Menetelmä 3 (tehokas):
Käyttämällä Multiple Dispatch Decoratoria
Useita lähetyskoristelaitteita voidaan asentaa:
pip3 install multipledispatch>
Jos pip ei ole asennettu laitteellesi:
Napsauta tästä Linuxille
Python 3
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> |
>
>
Lähtö:
6 12 17.985999999999997>
Backendissä Dispatcher luo objektin, joka tallentaa erilaisia toteutuksia ja valitsee suorituksen aikana sopivan menetelmän välitettyjen parametrien tyypiksi ja lukumääräksi.