Quando você está trabalhando com Python, frequentemente precisa decidir como seus objetos devem ser representados como strings. É aí que entram em jogo os métodos especiais para representação de objetos. Entender a diferença entre __str__ e __repr__ em Python é crucial para desenvolvedores Python, pois eles servem a propósitos distintos e são usados em contextos diferentes.
O que é o método __repr__ e quando utilizá-lo
O método __repr__
em Python é projetado para fornecer uma representação inequívoca de um objeto. Ele é usado principalmente para fins de depuração e desenvolvimento. O objetivo é criar uma string que, se passada para a função eval()
, poderia (teoricamente) recriar o objeto. No entanto, na prática, criar tal representação pode ser complexo e não é comumente feito.
A implementação padrão de __repr__
em Python não é particularmente útil, pois simplesmente retorna a classe e o endereço de memória do objeto. Portanto, é uma boa prática sempre implementar um método __repr__
que forneça informações significativas sobre o estado do objeto.
Por exemplo, se você tem uma classe Pont
o, uma boa implementação de __repr__
poderia ser assim:
class Ponto:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Ponto(x={self.x!r}, y={self.y!r})"
Note o uso de !r
na string de formatação, que garante que a saída de __repr__
seja ela mesma representada de forma inequívoca.
O que é o método __str__ e quando utilizá-lo
Por outro lado, __str__
tem como objetivo fornecer uma representação legível e amigável para humanos de um objeto. É o que é chamado quando você imprime um objeto ou usa a função embutida str()
. Diferente de __repr__
, __str__
não precisa ser inequívoco; ele apenas precisa ser claro e conciso para o usuário final.
Se você tem uma classe Data
, um método __str__
poderia ser assim:
class Data:
def __init__(self, dia, mes, ano):
self.dia = dia
self.mes = mes
self.ano = ano
def __str__(self):
return f"{self.dia}/{self.mes}/{self.ano}"
Este método __str__
fornece um formato de data simples e familiar que é fácil de ser entendido pelos usuários.
Como os Contêineres Usam __repr__
É interessante notar que, quando você imprime um contêiner como uma lista ou um dicionário, o Python usa o método __repr__
dos objetos contidos para representá-los dentro do contêiner. Isso ocorre porque o __repr__
dos objetos contidos é mais provável de ser útil para entender a estrutura do contêiner.
Resumo
Em resumo, sempre implemente um método __repr__
para suas classes para fornecer uma representação em string clara e inequívoca de seus objetos. Isso é essencial para depuração e registro de logs. Implementar __str__
é opcional e deve ser feito quando você deseja uma representação em string amigável ao usuário de um objeto. Lembre-se, __repr__
é para desenvolvedores, e __str__
é para clientes. Seguindo essas diretrizes, você garantirá que seus objetos Python sejam representados de forma eficaz tanto no desenvolvimento quanto em aplicações voltadas para usuários.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários