Nesta aula você vai aprender:
- O que são métodos especiais (também chamados de dunder methods)
- Como usar
__str__,__len__,__add__e outros - Como proteger atributos usando encapsulamento
- Como criar getters e setters em Python
- Como deixar suas classes mais limpas, seguras e profissionais
Vamos subir mais um nível!
Métodos Especiais (Dunder Methods)
Dunder = “Double UNDERscore” (dois underscores antes e depois)
Exemplos:
__init__
__str__
__len__
__add__
__repr__
Esses métodos não são chamados por você diretamente.
Eles são usados pelo Python para dar comportamento especial aos seus objetos.
__str__ — Controlando como o objeto aparece ao imprimir
Sem __str__, imprimir um objeto fica estranho:
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
p = Pessoa("João", 25)
print(p)
Saída:
<__main__.Pessoa object at 0x000001237AA>
Nada amigável, né?
Agora com __str__:
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def __str__(self):
return f"{self.nome}, {self.idade} anos"
Agora:
print(p)
Saída:
João, 25 anos
Muito mais profissional!
__len__ — Definindo o tamanho de um objeto
Exemplo: criar uma classe Playlist.
class Playlist:
def __init__(self, nome, musicas):
self.nome = nome
self.musicas = musicas
def __len__(self):
return len(self.musicas)
Uso:
p = Playlist("Workout", ["Song A", "Song B", "Song C"])
print(len(p)) # 3
__add__ — Somando objetos
Você pode até definir como “somar” dois objetos faz sentido.
Exemplo com contas bancárias:
class Conta:
def __init__(self, titular, saldo):
self.titular = titular
self.saldo = saldo
def __add__(self, outra_conta):
return self.saldo + outra_conta.saldo
Uso:
c1 = Conta("João", 500)
c2 = Conta("Maria", 800)
print(c1 + c2) # 1300
__repr__ — Representação oficial do objeto
__str__ → para humanos
__repr__ → para desenvolvedores
Exemplo:
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def __str__(self):
return f"{self.nome}, {self.idade}"
def __repr__(self):
return f"Pessoa('{self.nome}', {self.idade})"
Agora:
p = Pessoa("João", 25)
print(repr(p))
Saída:
Pessoa('João', 25)
🟦 Exercício 1
Crie uma classe Livro com:
- título
- autor
- número de páginas
Use __len__ para retornar o número de páginas.
🟩 Exercício 2
Crie uma classe Pessoa com:
- nome
- idade
E implemente __str__ e __repr__.
🟨 Exercício 3
Crie uma classe Matematica que permita somar dois objetos:
m1 = Matematica(10)
m2 = Matematica(5)
print(m1 + m2) # 15
Copyright notice: Unless otherwise stated, all articles are original to this website. Please cite the source when sharing.
Article link: http://usandopy.com/programacao-orientada-a-objetos/metodos-especiais-dunder-methods-em-python/