Resumo : neste tutorial, você aprenderá como usar o __repr__
método Python dunder e a diferença entre os métodos __repr__
e .__str__
Introdução ao __repr__
método mágico Python
O __repr__
método dunder define o comportamento quando você passa uma instância de uma classe para o arquivo repr()
.
O __repr__
método retorna a representação em string de um objeto. Normalmente, __repr__()
retorna uma string que pode ser executada e produzir o mesmo valor do objeto.
Em outras palavras, se você passar a string retornada do object_name.__repr__()
método para a eval()
função, obterá o mesmo valor que o object_name
. Vejamos um exemplo.
Primeiro, defina a Person
classe com três atributos de instância first_name
, last_name
e age
:
class Person:
def __init__(self, first_name, last_name, age):
self.first_name = first_name
self.last_name = last_name
self.age = age
Linguagem de código: Python ( python )
Segundo, crie uma nova instância da Person
classe e exiba sua representação em string:
person = Person('John', 'Doe', 25)
print(repr(person))
Linguagem de código: Python ( python )
Saída:
<__main__.Person object at 0x000001F51B3313A0>
Linguagem de código: HTML, XML ( xml )
Por padrão, a saída contém o endereço de memória do person
objeto. Para personalizar a representação de string do objeto, você pode implementar o __repr__
método assim:
class Person:
def __init__(self, first_name, last_name, age):
self.first_name = first_name
self.last_name = last_name
self.age = age
def __repr__(self):
return f'Person("{self.first_name}","{self.last_name}",{self.age})'
Linguagem de código: Python ( python )
Quando você passa uma instância da Person
classe para o repr()
, o Python chamará o __repr__
método automaticamente. Por exemplo:
person = Person("John", "Doe", 25)
print(repr(person))
Linguagem de código: Python ( python )
Saída:
Person("John","Doe",25)
Linguagem de código: JavaScript ( javascript )
Se você executar o return string Person("John","Doe",25)
, ele retornará o person
objeto.
Quando uma classe não implementa o __str__
método e você passa uma instância dessa classe para o str()
, Python retorna o resultado do __repr__
método porque internamente o __str__
método chama o __repr__
método:
Por exemplo:
person = Person('John', 'Doe', 25)
print(person)
Linguagem de código: Python ( python )
Saída:
Person("John","Doe",25)
Linguagem de código: JavaScript ( javascript )
Se uma classe implementar o __str__
método, o Python chamará o __str__
método quando você passar uma instância da classe para o arquivo str()
. Por exemplo:
class Person:
def __init__(self, first_name, last_name, age):
self.first_name = first_name
self.last_name = last_name
self.age = age
def __repr__(self):
return f'Person("{self.first_name}","{self.last_name}",{self.age})'
def __str__(self):
return f'({self.first_name},{self.last_name},{self.age})'
person = Person('John', 'Doe', 25)
# use str()
print(person)
# use repr()
print(repr(person))
Linguagem de código: Python ( python )
Saída:
(John,Doe,25)
Person("John","Doe",25)
Linguagem de código: JavaScript ( javascript )
__str__
contra__repr__
A principal diferença entre __str__
o __repr__
método e o público-alvo.
O __str__
método retorna uma representação em string de um objeto que pode ser lido por humanos, enquanto o __repr__
método retorna uma representação em string de um objeto que pode ser lido por máquina.
Resumo
- Implemente o
__repr__
método para personalizar a representação de string de um objeto quandorepr()
ele for chamado. - As
__str__
chamadas__repr__
internamente por padrão.