Python/Orientação a Objetos/Métodos Especiais
Python⏱ ~2 min de leitura

Métodos Especiais

__str__, __repr__, __len__ e operadores

Métodos dunder (double underscore, também chamados de métodos mágicos ou especiais) permitem que suas classes se integrem ao comportamento nativo do Python. Com eles, seus objetos podem ser comparados, ordenados, impressos, adicionados e muito mais.

__str__ define a representação legível para humanos (usada por print() e str()). __repr__ define a representação técnica para desenvolvedores (usada pelo REPL). __len__ permite usar len(). __eq__, __lt__ etc. permitem comparações. __add__, __mul__ etc. implementam operadores aritméticos.

__iter__ e __next__ tornam o objeto iterável, permitindo uso em for loops. __contains__ implementa o operador in.

Exemplo.java
class Vetor:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Vetor({self.x}, {self.y})"

    def __repr__(self):
        return f"Vetor(x={self.x!r}, y={self.y!r})"

    def __add__(self, outro):
        return Vetor(self.x + outro.x, self.y + outro.y)

    def __mul__(self, escalar):
        return Vetor(self.x * escalar, self.y * escalar)

    def __eq__(self, outro):
        return self.x == outro.x and self.y == outro.y

    def __len__(self):
        return 2  # dimensão do vetor

    def __abs__(self):
        return (self.x**2 + self.y**2) ** 0.5

v1 = Vetor(1, 2)
v2 = Vetor(3, 4)
print(v1 + v2)       # Vetor(4, 6)
print(v1 * 3)         # Vetor(3, 6)
print(abs(v2))        # 5.0
print(len(v1))        # 2
print(v1 == Vetor(1, 2))  # True

# Context manager com dunders
class Temporizador:
    def __enter__(self):
        import time
        self.inicio = time.time()
        return self

    def __exit__(self, *args):
        import time
        self.duracao = time.time() - self.inicio
💡 Dica pro

__repr__ deve retornar uma string que, ao ser avaliada, recrie o objeto — use para debugging. __str__ é para o usuário final.

Recompensa+40 XP+exercícios