0Pricing
Python Academy · Aula

Métodos mágicos: __str__ e __repr__

Implemente métodos dunder para obter representações legíveis dos objetos.

Métodos mágicos: __str__ e __repr__ é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

O que são métodos mágicos?

Métodos mágicos (dunder) são métodos especiais com sublinhados duplos que Python chama em contextos específicos, como ao imprimir ou comparar.

class Foo:
    def __str__(self):
        return "I am Foo"

f = Foo()
print(f)        # I am Foo
print(str(f))   # I am Foo

__repr__: representação para desenvolvedores

__repr__ deve retornar uma cadeia de caracteres não ambígua que, idealmente, permita recriar o objeto. Ela é exibida no REPL e usada por repr().

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"

p = Point(3, 4)
print(repr(p))  # Point(3, 4)

__str__: representação para usuários

__str__ fornece uma cadeia de caracteres compreensível para as pessoas. print() e str() chamam esse método. Se estiver ausente, Python usa __repr__ como alternativa.

class Temperature:
    def __init__(self, celsius):
        self.celsius = celsius

    def __str__(self):
        return f"{self.celsius}°C"

    def __repr__(self):
        return f"Temperature({self.celsius})"

t = Temperature(100)
print(t)        # 100°C
print(repr(t))  # Temperature(100)

Quando cada um é chamado

__str__: print(), str(), f-strings. __repr__: REPL, repr(), contêineres que exibem seus elementos.

class Item:
    def __str__(self): return "str"
    def __repr__(self): return "repr"

x = Item()
print(x)         # str
print([x])       # [repr]  ← list uses repr for elements

__format__ para formatação personalizada

Defina __format__ para controlar como f-strings com especificações de formato exibem seu objeto.

class Money:
    def __init__(self, amount):
        self.amount = amount

    def __format__(self, spec):
        if spec == "usd":
            return f"${self.amount:.2f}"
        return str(self.amount)

m = Money(9.5)
print(f"{m:usd}")  # $9.50

__bool__ para valor lógico

__bool__ permite que seu objeto seja avaliado em contextos booleanos. Retorne True ou False.

class Bag:
    def __init__(self, items):
        self.items = items

    def __bool__(self):
        return len(self.items) > 0

b = Bag([])
if not b:
    print("Bag is empty")  # Bag is empty

__len__ para len()

__len__ faz len(obj) funcionar. Ele também é usado por __bool__ quando nenhum __bool__ é definido.

class Stack:
    def __init__(self):
        self.data = []

    def push(self, v): self.data.append(v)

    def __len__(self):
        return len(self.data)

s = Stack()
s.push(1)
print(len(s))  # 1

__eq__ para igualdade

Defina __eq__ para especificar o que torna duas instâncias iguais com ==.

class Vector:
    def __init__(self, x, y):
        self.x, self.y = x, y

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

print(Vector(1,2) == Vector(1,2))  # True

__hash__ em conjunto com __eq__

Quando você define __eq__, Python define __hash__ como None, tornando o objeto não hashable. Defina __hash__ também se precisar usar o objeto em conjuntos ou dicionários.

class Point:
    def __init__(self, x, y): self.x, self.y = x, y
    def __eq__(self, o): return (self.x, self.y) == (o.x, o.y)
    def __hash__(self): return hash((self.x, self.y))

pts = {Point(1,2), Point(1,2)}
print(len(pts))  # 1

__add__ e aritmética

Operadores aritméticos correspondem a métodos dunder: __add__ para +, __sub__ para - etc.

class Vector:
    def __init__(self, x, y): self.x, self.y = x, y
    def __add__(self, o): return Vector(self.x+o.x, self.y+o.y)
    def __repr__(self): return f"Vector({self.x},{self.y})"

print(Vector(1,2) + Vector(3,4))  # Vector(4,6)

__getitem__ para indexação

__getitem__ permite que sua classe aceite indexação com colchetes, como obj[key].

class Matrix:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, idx):
        return self.data[idx]

m = Matrix([[1,2],[3,4]])
print(m[0])     # [1, 2]
print(m[1][0])  # 3

Verificação rápida

Qual método dunder é chamado quando você usa print(obj)?

Recapitulação

Métodos mágicos dão às suas classes um comportamento idiomático do Python. __repr__ é voltado para desenvolvedores, enquanto __str__ é voltado para usuários. Defina __eq__, __hash__ e métodos dunder aritméticos para tornar os objetos totalmente funcionais.

Perguntas Frequentes

A aula “Métodos mágicos: __str__ e __repr__” é grátis?

Sim — o texto completo de “Métodos mágicos: __str__ e __repr__” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Métodos mágicos: __str__ e __repr__”?

Implemente métodos dunder para obter representações legíveis dos objetos. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Métodos mágicos: __str__ e __repr__”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Classes e o método __init__
  2. Atributos de instância e de classe
  3. Métodos de instância e self
  4. Métodos mágicos: __str__ e __repr__
← Voltar para Python Academy