Contenido del Curso
Programación Orientada a Objetos en Python a Fondo
Programación Orientada a Objetos en Python a Fondo
Métodos de Magia Matemática
Existen métodos mágicos adicionales para diversas operaciones matemáticas en Python. Además del método mágico __add__
, que se utiliza para sumar, existen otros métodos mágicos para diferentes operaciones matemáticas:
Método Mágico | Operación |
---|---|
__add__(self, other) | + |
__sub__(self, other) ` | - |
"mul__(self, other)` | * |
__pow__(self, other) | ** |
Mod__(yo, otro) % | |
__truediv__(self, other) | / |
__floordiv__(self, other) | // |
Estos métodos mágicos suelen recibir dos argumentos: self
(que representa la instancia, que es el operando derecho de la expresión) y other
(que representa el operando izquierdo de la expresión). Por convención, es común referirse al segundo argumento como other
u other_obj
, pero tienes la flexibilidad de usar un nombre diferente si hace que el código sea más significativo o claro en el contexto de tu clase y sus operaciones. El nombre del segundo argumento debe reflejar su propósito y papel en la operación matemática que se está implementando.
``python a + b # se escribe a.add(b) # Python realiza
yo = a, otro = b
Veamos el ejemplo con el objeto int
:
a, b = 25, 12 print("a * b =", a * b) print("a.__mul__(b) =", a.__mul__(b))
Crear un método mágico en Python nos permite definir una lógica personalizada para operadores matemáticos. Típicamente, estos métodos devuelven una nueva instancia de la clase donde ciertos atributos son sumados, multiplicados, divididos, etc. Por ejemplo, en una clase Carretera
, el operador +
podría devolver una nueva carretera con la longitud añadida, como se comentó en el primer capítulo de esta sección.
Mejoremos el ejemplo del primer capítulo de esta sección:
class Road: def __init__(self, length): self.length = length def __add__(self, other): if isinstance(other, Road): return Road(self.length + other.length) return Road(self.length + other) road_1 = Road(20) road_2 = Road(30) road_3 = road_1 + road_2 # road_3 = road_1.__add__(road_2) road_4 = road_2 + 62 print(type(road_3), type(road_4)) print(road_3.length) print(road_4.length)
Comparado con Java o JavaScript, en Python, en lugar de definir un método regular add
para añadir clases, podemos cambiar el comportamiento del operador +
, que es mucho más cómodo de usar (instance1 + instance2
) que llamar a instance1.add(instance2)
cada vez.
¡Gracias por tus comentarios!