Conteúdo do Curso
Programação Orientada a Objetos em Python Avançado
Programação Orientada a Objetos em Python Avançado
Métodos Mágicos de Matemática
Há métodos mágicos adicionais para várias operações matemáticas em Python. Além do método mágico __add__
, que é utilizado para adição, existem outros métodos mágicos para diferentes operações matemáticas:
Método Mágico | Operação |
__add__(self, other) | + |
__sub__(self, other) | - |
__mul__(self, other) | * |
__pow__(self, other) | ** |
__mod__(self, other) | % |
__truediv__(self, other) | / |
__floordiv__(self, other) | // |
Esses métodos mágicos normalmente recebem dois argumentos: self
(representando a instância, que é o operando direito na expressão) e other
(representando o operando esquerdo na expressão). Por convenção, é comum se referir ao segundo argumento como other
ou other_obj
, mas você tem a flexibilidade de usar um nome diferente se isso tornar o código mais significativo ou claro no contexto da sua classe e suas operações. O nome do segundo argumento deve refletir seu propósito e papel na operação matemática que está sendo implementada.
Vamos analisar o exemplo com o objeto int
:
a, b = 25, 12 print("a * b =", a * b) print("a.__mul__(b) =", a.__mul__(b))
Criar um método mágico em Python nos permite definir uma lógica personalizada para operadores matemáticos. Tipicamente, esses métodos retornam uma nova instância da classe onde certos atributos são adicionados, multiplicados, divididos, etc. Por exemplo, em uma classe Road
, o operador +
poderia retornar uma nova estrada com o comprimento adicionado, conforme discutido no primeiro capítulo desta seção.
Vamos aprimorar o exemplo do primeiro capítulo desta seção:
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 com Java ou JavaScript, em Python, em vez de definir um método regular add
para adicionar classes, podemos alterar o comportamento do operador +
, o que é muito mais conveniente de usar (instance1 + instance2
) do que chamar instance1.add(instance2)
toda vez.
Obrigado pelo seu feedback!