Python | Metode Pārslodze
Metodes pārslodze:
Divām vai vairākām metodēm ir vienāds nosaukums, bet atšķirīgs parametru skaits vai dažāda veida parametri, vai abi. Šīs metodes sauc par pārslogotām metodēm, un to sauc par metodi pārslodze .
Tāpat kā citās valodās (piemēram, metodes pārslodze C++ ) darīt, python pēc noklusējuma neatbalsta metodes pārslodzi. Bet ir dažādi veidi, kā panākt metodes pārslodzi Python.
Metodes pārslodzes problēma Python ir tāda, ka mēs varam pārslogot metodes, bet varam izmantot tikai jaunāko definēto metodi.
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> )> |
Izvade
100
Iepriekš minētajā kodā esam definējuši divas produktu metodes, kuras varam izmantot tikai otro produkta metodi, jo python neatbalsta metodes pārslodzi. Mēs varam definēt daudzas viena nosaukuma un dažādu argumentu metodes, taču mēs varam izmantot tikai jaunāko definēto metodi. Citas metodes izsaukšana radīs kļūdu. Tāpat kā šeit zvana produkts (4,5) radīs kļūdu, jo jaunākajai produkta metodei ir nepieciešami trīs argumenti.
Tādējādi, lai pārvarētu iepriekš minēto problēmu, mēs varam izmantot dažādus veidus, kā panākt metodes pārslodzi.
1. metode (nav visefektīvākā metode):
Mēs varam izmantot argumentus, lai viena un tā pati funkcija darbotos atšķirīgi, t.i., kā norādīts argumentos.
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'> )> |
Izvade
11 Hi Geeks
2. metode (nav efektīva):
Mēs varam panākt metodes pārslodzi python ar lietotāja definētu funkciju, izmantojot Nav atslēgvārds kā noklusējuma parametrs.
Koda skaidrojums:
Pirmais pievienošanas metodes parametrs ir iestatīts uz Nav. Tas dos mums iespēju to izsaukt ar parametru vai bez tā.
Kad mēs nododam argumentus pievienošanas metodei (darbojas):
- Metode pārbauda, vai abi parametri ir pieejami vai nav.
- Tā kā mēs jau esam norādījuši noklusējuma parametru vērtības kā Nav, ja kāda no vērtībām netiek nodota, tā paliks Nav.
- Izmantojot If-Else paziņojumus, mēs varam panākt metodes pārslodzi, pārbaudot katru parametru kā vienu priekšrakstu.
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> )> |
Izvade
5 2
Iepriekš minēto metožu problēma ir tāda, ka tas padara kodu sarežģītāku ar vairākiem if/else paziņojumiem un nav vēlamais veids, kā panākt metodes pārslodzi.
3. metode (efektīvā):
Izmantojot Multiple Dispatch Decorator
Vairāku nosūtīšanas dekoratoru var uzstādīt:
pip3 install multipledispatch
Ja pip jūsu ierīcē nav instalēts:
Noklikšķiniet šeit, lai izmantotu Windows
Noklikšķiniet šeit, lai iegūtu 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> |
Izvade:
6 12 17.985999999999997
Aizmugursistēmā Dispečers izveido objektu, kurā tiek saglabātas dažādas ieviešanas, un izpildlaikā tas atlasa atbilstošo metodi kā nodoto parametru veidu un skaitu.