Python | Metode Overbelastning

Metodeoverbelastning:

To eller flere metoder har samme navn, men forskellige antal parametre eller forskellige typer parametre eller begge. Disse metoder kaldes overbelastede metoder, og dette kaldes metode overbelastning .

Ligesom andre sprog (f.eks. metodeoverbelastning i C++ ) gør, understøtter python ikke metodeoverbelastning som standard. Men der er forskellige måder at opnå metodeoverbelastning i Python.

Problemet med metodeoverbelastning i Python er, at vi kan overbelaste metoderne, men kan kun bruge den senest definerede metode.

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> )>

Produktion

100 

I ovenstående kode har vi defineret to produktmetoder, vi kan kun bruge den anden produktmetode, da python ikke understøtter metodeoverbelastning. Vi kan definere mange metoder af samme navn og forskellige argumenter, men vi kan kun bruge den senest definerede metode. Kaldning af den anden metode vil producere en fejl. Som at ringe her produkt(4,5) vil producere en fejl, da den senest definerede produktmetode tager tre argumenter.

For at overvinde ovenstående problem kan vi således bruge forskellige måder til at opnå metodeoverbelastningen.

Metode 1 (ikke den mest effektive metode):

Vi kan bruge argumenterne til at få den samme funktion til at fungere anderledes, dvs. i henhold til argumenterne.

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'> )>

Produktion

11 Hi Geeks 

Metode 2 (ikke den effektive):

Vi kan opnå metodeoverbelastning i python ved hjælp af brugerdefineret funktion Ingen nøgleord som standardparameter.

Kodeforklaring:

Den første parameter i tilføjelsesmetoden er sat til Ingen. Dette vil give os mulighed for at kalde det med eller uden en parameter.

Når vi sender argumenter til add-metoden (fungerer):

  • Metoden kontrollerer, om begge parametre er tilgængelige eller ej.
  • Da vi allerede har angivet standardparameterværdier som Ingen, vil den forblive Ingen, hvis nogen af ​​værdierne ikke passeres.
  • Ved at bruge If-Else-sætninger kan vi opnå metodeoverbelastning ved at kontrollere hver parameter som en enkelt sætning.

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> )>

Produktion

5 2 

Problemet med ovenstående metoder er, at det gør koden mere kompleks med flere if/else-sætninger og ikke er den ønskede måde at opnå metodeoverbelastning på.

Metode 3 (effektiv):

Ved at bruge Multiple Dispatch Decorator

Multiple Dispatch Decorator Kan installeres af:

pip3 install multipledispatch 

Hvis pip ikke er installeret på din enhed:

Klik her for Windows

Klik her for 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>

Produktion:

6 12 17.985999999999997 

I Backend opretter Dispatcher et objekt, som gemmer forskellige implementeringer, og på runtime vælger den den passende metode som typen og antallet af parametre, der sendes.