Sobrecarga del operador en Python

Sobrecarga del operador en Python
La sobrecarga corresponde a la tendencia de un método o un operador a actuar de múltiples maneras en el sentido de programación, en función de los parámetros proporcionados a la técnica o los operandos en los que opera el operador. La sobrecarga del operador significa que el significado prolongado se da por encima de su importancia funcional predefinida. Los operadores de Python funcionan para clases incorporadas, pero para varios tipos, el mismo operador actúa de manera diferente. Veremos cómo podríamos hacer una sobrecarga del operador en Python en esta guía.

Por ejemplo, el operador + puede agregar dos números matemáticamente, combinar dos listas o concatenar cadenas. Aquí hay un programa simple de Python para mostrar una visión del operador + utilizado para la adición y concatenación.

Bueno, ¿qué viene si usamos estos operadores para objetos en un usuario definido clase? Tomemos el siguiente programa que intenta simular un lugar en el esquema 2-D de dimensiones. A continuación, ya puede ver eso porque Python no entendió cómo unirse a 2 casos de coordenadas, un Error de tecleado es generado.

Podemos realizar esta tarea en Python a través de la sobrecarga del operador, pero en primer lugar, comprendamos los métodos especiales.

Métodos mágicos especiales

Métodos de clase que comienzan con el doble bajo se clasifican en Python como métodos especiales o funciones mágicas. Las funciones que se utilizan para llevar a cabo actividades específicas. Los métodos habituales que describimos para una clase no son tales funciones. Uno de ellos sería el __en eso_() función que mencionamos anteriormente. Cada vez que construimos un nuevo objeto en esa clase, se llama. Renderizaremos nuestras funciones de clase a las funciones integradas a través de funciones mágicas. En Python, hay varias otras funciones especiales.

Operadores binarios o matemáticos

Aquí están los detalles de las funciones mágicas para sobrecargar los operadores binarios o matemáticos de Python.

Operadores de relacionales o de comparación

A continuación se presentan los detalles de las funciones mágicas para sobrecargar la comparación de Python o los operadores relacionales.

Operadores de Asignación

Estos son los detalles de algunas funciones mágicas para sobrecargar los operadores de asignación en el código de Python.

Ahora, es hora de vislumbrar un par de códigos de muestra cuando usamos los métodos mágicos mencionados anteriormente y sobrecarga a ciertos operadores.

Sobrecargar los operadores binarios o matemáticos

Ejemplo 01: Operador de adición
Tendrás que hacer cumplir el __agregar_() método en la clase para sobrecargar el + operador. Gran deber llega con gran fuerza. Dentro de este método, podrías hacer lo que quieras. Pero es mucho más racional devolver el 'Coordina objeto de la suma de coordenadas.

Cuando probaste C1 + C2, Python realmente llama a su magia .__add __ () método como C1.__add __ (C2) o Coord.__add __ (C1, C2).

Ejemplo 02: Operador de multiplicación
Del mismo modo, incluso puede sobrecargar varios operadores binarios utilizando funciones mágicas. En el mismo ejemplo anterior, al sobrecargar el operador de multiplicación, obtenemos 2, 6 Como nuestra respuesta a la función mágica.

Ejemplo 03: Operador de sustracción
Usando el operador de sustracción, obtuvimos -1, -1 Como nuestra respuesta.

Ejemplo 04: operador de energía
Sobrecargamos el fuerza operador mientras usa la función Magic de potencia; tenemos 1, 8.

Ejemplo 05: Operador de módulo
Sobrecarga del operador del módulo, hemos utilizado el __modificación__ función mágica para obtener el módulo.

También puede usar los otros operadores matemáticos, E.gramo., Operador de división de división y piso, para sobrecargar.

Sobrecargar los operadores de comparación

Python no restringe la sobrecarga de operadores a solo operadores binarios o aritméticos. También podemos sobrecargar a los operadores de comparación.

Ejemplo 01: Menos que el operador
Suponga que requerimos menos que el '<' symbol en nuestro 'Coordina clase a implementar. Comparemos el valor de estos argumentos de la fuente y obtengamos la respuesta. Como de costumbre, se puede aplicar. Tenemos tres objetos y los estamos comparando en declaraciones impresas. Como resultado, obtendremos ese objeto C1 es menos que C2, Entonces sale Verdadero. Por otro lado, C2 y C1 son Más excelente que C3; Es por eso que ambos falsos salida.

Ejemplo 02: no es igual al operador
Ahora sobrecargando el No es igual (!=) Operador de comparación, obtendrá Verdadero En el caso de la primera y segunda declaración de impresión porque satisface la condición de que ambos objetos no son iguales. Por otro lado, el objeto 1 produce lo mismo que el objeto 3, que no cumple con el requisito de no igual. Es por eso que la tercera declaración de impresión sale FALSO como resultado.

Ejemplo 03: mayor o igual al operador
Probemos el mismo ejemplo para sobrecargar el mayor que o igual al operador. En el caso de la primera declaración de impresión, tenemos 2> = 13, cual es no es verdad; Por eso produce falso. En la segunda y tercera impresión, tenemos 13> = 2 y 2> = 2, respectivamente. Ambos son Verdadero ya que satisfacen la condición de mayor o igual a.

Prueba los otros operadores de comparación, E.gramo., más significativo que, igual a, 'menor o igual a', en su código también.

Sobrecargar los operadores de asignación

Eche un vistazo a un ejemplo de sobrecarga del operador de asignación. Estamos tomando un ejemplo similar con la sobrecarga de la '-=' operador de asignación. Hemos definido dos objetos que tienen valores de coordenadas Y y Z. Primer objeto C1 está pasando sus valores a 'ser.y ' y 'ser.z ' variables, respectivamente. Por otro lado, el objeto C2 está pasando sus valores a 'otro.y ' y 'otro.z '.

Objeto C1 tiene valores de ser.y = 1 y ser.z = 1 ahora mismo. El objeto C2 valores 'otro.y = -2 ' y 'otro.z = -3 ' ha sido pasado a restado desde el objeto C1 valores. Como resultado, los resultados de C1 - C2 ser.y - otro.y = 1-(-2) y ser.z - otro.z = 1-(-3). El resultado calculado, que es 3 y 4, se ha guardado en 'yo.x 'y' yo.z 'Debido al operador de asignación de' =.'En la impresión, este código generará el resultado del objeto C1, que tiene dos variables ser.y = 3 y ser.z = 4.

Conclusión

Intentamos cubrir a todos los operadores de su código para una mejor comprensión de la sobrecarga del operador.