Methode Overbelasting:
css vetgedrukte tekst
Twee of meer methoden hebben dezelfde naam, maar een verschillend aantal parameters of verschillende soorten parameters, of beide. Deze methoden worden overbelaste methoden genoemd en dit wordt methode genoemd overbelasting .
Net als andere talen (bijvoorbeeld methode-overbelasting in C++ ) doen, ondersteunt Python standaard geen overbelasting van methoden. Maar er zijn verschillende manieren om overbelasting van methoden in Python te bereiken.
Het probleem met overbelasting van methoden in Python is dat we de methoden mogelijk overbelasten, maar alleen de laatst gedefinieerde methode kunnen gebruiken.
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>)> |
>
>Uitvoer
100>
In de bovenstaande code hebben we twee productmethoden gedefinieerd. We kunnen alleen de tweede productmethode gebruiken, omdat Python geen overbelasting van methoden ondersteunt. We kunnen veel methoden met dezelfde naam en verschillende argumenten definiëren, maar we kunnen alleen de laatst gedefinieerde methode gebruiken. Als u de andere methode aanroept, ontstaat er een fout. Zoals hier bellen artikel(4,5) zal een fout opleveren omdat de laatst gedefinieerde productmethode drie argumenten nodig heeft.
Om het bovenstaande probleem te overwinnen, kunnen we dus verschillende manieren gebruiken om de methode-overbelasting te bereiken.
Methode 1 (niet de meest efficiënte methode):
We kunnen de argumenten gebruiken om dezelfde functie anders te laten werken, dat wil zeggen volgens de argumenten.
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'>)> |
>
>Uitvoer
11 Hi Geeks>
Methode 2 (niet de efficiënte):
We kunnen methode-overbelasting in Python bereiken door een door de gebruiker gedefinieerde functie te gebruiken Geen trefwoord als standaardparameter.
Code-uitleg:
De eerste parameter van de add-methode is ingesteld op Geen. Dit geeft ons de mogelijkheid om het met of zonder parameter aan te roepen.
Wanneer we argumenten doorgeven aan de add-methode (Werken):
- De methode controleert of beide parameters beschikbaar zijn of niet.
- Omdat we de standaard parameterwaarden al als Geen hebben opgegeven, zal een waarde die niet wordt doorgegeven, Geen blijven.
- Met behulp van If-Else-instructies kunnen we overbelasting van de methode bereiken door elke parameter als een enkele instructie te controleren.
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>)> |
>
>Uitvoer
lambda-functie java
5 2>
Het probleem met bovenstaande methoden is dat het de code complexer maakt met meerdere if/else-instructies en dat dit niet de gewenste manier is om overbelasting van de methode te bereiken.
Methode 3 (efficiënte):
Door gebruik te maken van meerdere verzenddecorateurs
Multiple Dispatch Decorator Kan worden geïnstalleerd door:
pip3 install multipledispatch>
Als pip niet op uw apparaat is geïnstalleerd:
Klik hier voor 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> |
>
>
Uitgang:
6 12 17.985999999999997>
In Backend maakt Dispatcher een object dat verschillende implementaties opslaat en tijdens runtime selecteert het de juiste methode op basis van het type en het aantal doorgegeven parameters.