logo

Pitone | Sovraccarico del metodo

Sovraccarico del metodo:

cos'è la gestione delle eccezioni in Java

Due o più metodi hanno lo stesso nome ma numeri diversi di parametri o tipi diversi di parametri, o entrambi. Questi metodi sono chiamati metodi di sovraccarico e questo è chiamato metodo sovraccarico .

Come altre lingue (ad esempio, sovraccarico del metodo in C++ ) sì, Python non supporta l'overload dei metodi per impostazione predefinita. Ma ci sono diversi modi per ottenere l'overload dei metodi in Python.



Il problema con l'overload dei metodi in Python è che possiamo sovraccaricare i metodi ma possiamo utilizzare solo l'ultimo metodo definito.

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

>

>

Produzione

100>

Nel codice precedente, abbiamo definito due metodi del prodotto, possiamo utilizzare solo il secondo metodo del prodotto, poiché Python non supporta l'overload del metodo. Possiamo definire molti metodi con lo stesso nome e argomenti diversi, ma possiamo utilizzare solo l'ultimo metodo definito. La chiamata all'altro metodo genererà un errore. Come qui che chiamano prodotto(4,5) genererà un errore poiché l'ultimo metodo del prodotto definito accetta tre argomenti.

Pertanto, per superare il problema di cui sopra possiamo utilizzare diversi modi per ottenere l'overload del metodo.

Metodo 1 (non il metodo più efficiente):

Possiamo usare gli argomenti per far funzionare la stessa funzione in modo diverso, cioè secondo gli argomenti.

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

>

>

Produzione

11 Hi Geeks>

Metodo 2 (non quello efficiente):

Possiamo ottenere l'overload del metodo in Python tramite la funzione definita dall'utente utilizzando Nessuno parola chiave come parametro predefinito.

Spiegazione del codice:

Il primo parametro del metodo add è impostato su None. Questo ci darà la possibilità di chiamarlo con o senza parametro.

Quando passiamo argomenti al metodo add (Working):

  • Il metodo verifica se entrambi i parametri sono disponibili o meno.
  • Poiché abbiamo già fornito i valori predefiniti dei parametri come None, se uno qualsiasi dei valori non viene passato rimarrà None.
  • Utilizzando le istruzioni If-Else, possiamo ottenere l'overload del metodo controllando ciascun parametro come una singola istruzione.

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

>

>

Produzione

5 2>

Il problema con i metodi di cui sopra è che rende il codice più complesso con più istruzioni if/else e non è il modo desiderato per ottenere l'overload del metodo.

Metodo 3 (Efficiente):

Utilizzando il decoratore di invii multipli

Decoratore per spedizioni multiple Può essere installato da:

pip3 install multipledispatch>

Se pip non è installato sul tuo dispositivo:

Fare clic qui per Windows

Fare clic qui per 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>

>

>

Produzione:

6 12 17.985999999999997>

Nel backend, Dispatcher crea un oggetto che memorizza diverse implementazioni e in fase di esecuzione seleziona il metodo appropriato come tipo e numero di parametri passati.

database Java jdbc