Python __repr__

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 Personclasse com três atributos de instância first_name, last_namee age:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = ageLinguagem de código:  Python  ( python )

Segundo, crie uma nova instância da Personclasse 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 personobjeto. 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 Personclasse 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 personobjeto.

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 quando repr()ele for chamado.
  • As __str__chamadas __repr__internamente por padrão.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *