Em [[Classes em Python]], é possível personalizar o comportamento dos operadores (como `+`, `-`, `*`, etc.) quando aplicados a objetos da sua classe. Isso é feito através de métodos especiais, também conhecidos como "métodos mágicos" ou "dunder methods" (devido aos dois underscores no início e no fim do nome).
**Exemplo:**
A classe `Vault` (cofre) abaixo simula um cofre que armazena moedas (galleons, sickels e knuts). O método `__add__` é definido para permitir a soma de dois cofres:
```python
class Vault(): #Removi os argumentos da classe, pois não faziam sentido
def __init__(self, galleons=0, sickels=0, knuts=0):
self.galleons = galleons
self.sickels = sickels
self.knuts = knuts
def __str__(self):
return f"{self.galleons} Galleons, {self.sickels} Sickels, {self.knuts} Knuts"
def __add__(self, other):
galleons = self.galleons + other.galleons
sickels = self.sickels + other.sickels
knuts = self.knuts + other.knuts
return Vault(galleons, sickels, knuts)
potter = Vault(100,50,25)
weasley = Vault(25,50,100)
print(potter + weasley) # Output: 125 Galleons, 100 Sickels, 125 Knuts
```
* `__init__(self, galleons=0, sickels=0, knuts=0)`: O construtor da classe, que inicializa o cofre com quantidades de cada moeda.
* `__str__(self)`: Define como o objeto `Vault` será representado como uma string (quando usado com `print()`, por exemplo).
* `__add__(self, other)`: Define o comportamento do operador `+`. Quando dois objetos `Vault` são somados, este método é chamado. Ele cria um novo objeto `Vault` com a soma das moedas de cada cofre.
**Outros operadores:**
Além de `__add__`, existem outros métodos especiais para modificar o comportamento de diferentes operadores:
* `__sub__(self, other)`: Subtração (`-`)
* `__mul__(self, other)`: Multiplicação (`*`)
* `__div__(self, other)`: Divisão (`/`)
* `__eq__(self, other)`: Igualdade (`==`)
* `__ne__(self, other)`: Desigualdade (`!=`)
* `__lt__(self, other)`: Menor que (`<`)
* `__gt__(self, other)`: Maior que (`>`)
* `__le__(self, other)`: Menor ou igual a (`<=`)
* `__ge__(self, other)`: Maior ou igual a (`>=`)
**Referência:**
* [Página do W3schools sobre aulas em Python](https://www.w3schools.com/python/python_classes.asp)