logo

Python | Surcharge de méthode

Surcharge de méthode :

java analyser la chaîne en int

Deux méthodes ou plus portent le même nom mais un nombre de paramètres différent ou des types de paramètres différents, ou les deux. Ces méthodes sont appelées méthodes surchargées et cela s'appelle méthode surcharge .



Comme d'autres langues (par exemple, surcharge de méthode en C++ ) faites, python ne prend pas en charge la surcharge de méthodes par défaut. Mais il existe différentes manières de réaliser une surcharge de méthodes en Python.

Le problème avec la surcharge de méthodes en Python est que nous pouvons surcharger les méthodes mais ne pouvons utiliser que la dernière méthode définie.

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

>

>

Sortir

100>

Dans le code ci-dessus, nous avons défini deux méthodes de produit. Nous ne pouvons utiliser que la deuxième méthode de produit, car Python ne prend pas en charge la surcharge de méthodes. Nous pouvons définir de nombreuses méthodes portant le même nom et des arguments différents, mais nous ne pouvons utiliser que la dernière méthode définie. L’appel de l’autre méthode produira une erreur. Comme ici, j'appelle produit(4,5) produira une erreur car la dernière méthode de produit définie prend trois arguments.

Ainsi, pour résoudre le problème ci-dessus, nous pouvons utiliser différentes manières pour réaliser la surcharge de méthode.

Méthode 1 (pas la méthode la plus efficace) :

Nous pouvons utiliser les arguments pour faire fonctionner la même fonction différemment, c'est-à-dire selon les arguments.

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

>

>

Sortir

11 Hi Geeks>

Méthode 2 (pas la plus efficace) :

Nous pouvons réaliser une surcharge de méthode en python par fonction définie par l'utilisateur en utilisant Aucun mot-clé comme paramètre par défaut.

Explication du code :

Le premier paramètre de la méthode add est défini sur Aucun. Cela nous donnera la possibilité de l'appeler avec ou sans paramètre.

Lorsque nous passons des arguments à la méthode add (Working) :

  • La méthode vérifie si les deux paramètres sont disponibles ou non.
  • Comme nous avons déjà donné les valeurs de paramètre par défaut comme Aucune, si l'une des valeurs n'est pas transmise, elle restera Aucune.
  • En utilisant les instructions If-Else, nous pouvons réaliser une surcharge de méthode en vérifiant chaque paramètre comme une seule instruction.

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

logo java
>

>

Sortir

5 2>

Le problème avec les méthodes ci-dessus est que cela rend le code plus complexe avec plusieurs instructions if/else et n'est pas le moyen souhaité pour obtenir une surcharge de méthode.

Méthode 3 (efficace) :

En utilisant plusieurs décorateurs de répartition

Décorateur à répartition multiple Peut être installé par :

pip3 install multipledispatch>

Si pip n'est pas installé sur votre appareil :

Cliquez ici pour Windows

Cliquez ici pour 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>

>

>

Sortir:

6 12 17.985999999999997>

Dans le backend, Dispatcher crée un objet qui stocke différentes implémentations et lors de l'exécution, il sélectionne la méthode appropriée en fonction du type et du nombre de paramètres transmis.