logo

Pitón | Sobrecarga de métodos

Sobrecarga de métodos:

tabla java

Dos o más métodos tienen el mismo nombre pero diferente número de parámetros o diferentes tipos de parámetros, o ambos. Estos métodos se llaman métodos sobrecargados y esto se llama método. sobrecargar .



Al igual que otros idiomas (por ejemplo, sobrecarga de métodos en C++ ) lo hace, Python no admite la sobrecarga de métodos de forma predeterminada. Pero existen diferentes formas de lograr la sobrecarga de métodos en Python.

El problema con la sobrecarga de métodos en Python es que podemos sobrecargar los métodos pero solo podemos usar el último método definido.

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

>

>

Producción

100>

En el código anterior, hemos definido dos métodos de producto; solo podemos usar el segundo método de producto, ya que Python no admite la sobrecarga de métodos. Podemos definir muchos métodos con el mismo nombre y diferentes argumentos, pero solo podemos usar el último método definido. Llamar al otro método producirá un error. como aqui llamando producto(4,5) producirá un error ya que el último método de producto definido requiere tres argumentos.

Por lo tanto, para superar el problema anterior podemos utilizar diferentes formas de lograr la sobrecarga del método.

Método 1 (no es el método más eficiente):

Podemos usar los argumentos para hacer que la misma función funcione de manera diferente, es decir, según los 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'>)>

>

>

Producción

11 Hi Geeks>

Método 2 (no es el eficiente):

Podemos lograr la sobrecarga de métodos en Python mediante una función definida por el usuario usando Ninguno palabra clave como parámetro predeterminado.

Explicación del código:

El primer parámetro del método agregar se establece en Ninguno. Esto nos dará la opción de llamarlo con o sin parámetro.

Cuando pasamos argumentos al método add (en funcionamiento):

  • El método comprueba si ambos parámetros están disponibles o no.
  • Como ya hemos proporcionado valores de parámetro predeterminados como Ninguno, si no se pasa alguno de los valores, seguirá siendo Ninguno.
  • Usando declaraciones If-Else, podemos lograr la sobrecarga de métodos verificando cada parámetro como una sola declaración.

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

>

>

Producción

5 2>

El problema con los métodos anteriores es que hace que el código sea más complejo con múltiples declaraciones if/else y no es la forma deseada de lograr la sobrecarga del método.

Método 3 (eficiente):

Mediante el uso del decorador de envío múltiple

Decorador de despacho múltiple Puede ser instalado por:

pip3 install multipledispatch>

Si pip no está instalado en su dispositivo:

Haga clic aquí para Windows

Haga clic aquí para 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>

mysql muestra todos los usuarios

>

>

Producción:

6 12 17.985999999999997>

En Backend, Dispatcher crea un objeto que almacena diferentes implementaciones y, en tiempo de ejecución, selecciona el método apropiado según el tipo y la cantidad de parámetros pasados.