sábado, 5 de dezembro de 2020

str() vs repr() em Python

str() e repr() são usados para obter uma representação de string do objeto.

Exemplo de str():

s = 'Olá, Acervo Lima'
print(str(s)) 
print(str(2.0/11.0)) 

Saída:

Olá, Acervo Lima
0.181818181818

Exemplo de repr():

s = 'Olá, Acervo Lima'
print(repr(s))
print(repr(2.0/11.0))

Saída:

'Olá, Acervo Lima'
0.18181818181818182

A partir da saída acima, podemos ver se imprimimos string usando a função repr(), em seguida, ela imprime com um par de aspas e, se calcularmos um valor, obtemos um valor mais preciso do que a função str().

A seguir estão as diferenças:

  • str() é usado para criar saída para o usuário final, enquanto repr() é usado principalmente para depuração e desenvolvimento. o objetivo de repr é ser inequívoco e str’s deve ser legível. Por exemplo, se suspeitarmos que um float tem um pequeno erro de arredondamento, repr irá nos mostrar, enquanto str pode não.
  • repr() calcula a representação de string "oficial" de um objeto (uma representação que tem todas as informações sobre o objeto) e str() é usado para calcular a representação de string "informal" de um objeto (uma representação que é útil para imprimir o objeto).
  • A função print e a função interna str() usam __str__ para exibir a representação de string do objeto, enquanto a função interna repr() usa __repr__ para exibir o objeto.

Vamos entender isso por um exemplo:

import datetime
today = datetime.datetime.now()

# Imprime formato legível para objeto de data e hora
print(str(today))

# imprime o formato oficial do objeto data-hora
print(repr(today))

Resultado:

2020-12-05 19:05:20.173734
datetime.datetime(2020, 12, 5, 19, 5, 20, 173734)

str() exibe a data de hoje de uma forma que o usuário pode entender a data e hora.

repr() imprime a representação “oficial” de um objeto de data e hora (significa que usando a representação de string “oficial” podemos reconstruir o objeto).

Como fazê-los funcionar para nossas próprias classes definidas?
Uma classe definida pelo usuário também deve ter um __repr__ se precisarmos de informações detalhadas para depuração. E se acharmos que seria útil ter uma versão string para os usuários, criamos uma função __str__.

# Programa Python para demonstrar a escrita
# de __repr__ e __str__ para classes definidas pelo usuário

# Uma classe definida pelo usuário para representar números complexos
class Complex:

    # construtor
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag

    # Para chamar repr (). Imprime informações do objeto
    def __repr__(self):
        return 'Racional(%s, %s)' % (self.real, self.imag)

    # Para chamar str(). Imprime forma legível
    def __str__(self):
        return '%s + i%s' % (self.real, self.imag)

t = Complex(10, 20)

print(str(t))
print(repr(t))

Resultado:

10 + i20
Racional(10, 20)

Artigo escrito por Arpit Agarwal e melhorado por rajivsarkar67 e traduzido por Acervo Lima de str() vs repr() in Python

0 comentários:

Postar um comentário