In Python, repr() è un metodo built-in utilizzato nella programmazione ad oggetti per rappresentare un oggetto come stringa. Anche __str__() rappresenta il valore di un oggetto, ma è più orientato all'utente finale, mentre __repr__() è utilizzato principalmente per effettuare operazioni di debug.

Utilizzo di repr() in Python

Per ottenere la rappresentazione del nostro oggetto ci basterà chiamare il metodo repr(obj), passandogli come parametro l'oggetto del quale vogliamo la nostra rappresentazione.

import datetime

oggi = datetime.datetime.now()

print(str(oggi))
print(repr(oggi))

""" Output """

2019-12-02 09:19:47.261039
datetime.datetime(2019, 12, 2, 9, 19, 47, 261039)

Come vedi str() visualizza la data nel formato leggibile dall'utente finale, mentre repr() visualizza la rappresentazione dell'oggetto datetime.

Implementare repr() in una classe custom

Nell'esempio precedente, abbiamo visto il risultato che il metodo repr() ritorna per classe datetime. Tuttavia è possibile implementare un comportamento customizzato di questa funzione per rappresentazione la nostra classe effettuandone l'override:

class Rettangolo:
def __init__(self, base, altezza):
self.base = base
self.altezza = altezza

def __repr__(self):
return "Rettangolo({0}, {1})".format(self.base, self.altezza)


rettangolo = Rettangolo(10, 5)
print(repr(rettangolo))

""" Output """
Rettangolo(10, 5)

Differenze tra __repr__() e __str__()

Un altro esempio molto utilizzato per comprendere l'utilizzo di __repr__()  e la differenza con __str__(), è quello della rappresentazione dei numeri complessi. Andiamo quindi a creare la classe e a definire i metodi repr e str:

class NumeroComplesso:
def __init__(self, n_reale, n_immaginario):
self.n_reale= n_reale
self.n_immaginario= n_immaginario

def __repr__(self):
return "Razionale({0}, {1})".format(self.n_reale, self.n_immaginario)

def __str__(self):
return "{0} + i{1}".format(self.n_reale, self.n_immaginario)


obj = NumeroComplesso(10, 5)
print(repr(obj))
print(str(obj))
""" Output """
Razionale(10, 5)
10 + i5

Come puoi vedere il metodo repr() ci da informazioni riguardo l'oggetto creato, mentre str() ci fornisce un output leggibile dall'utente.

Ricorda inoltre che se  il metodo __str__() non è stato implementato, viene utilizzato __repr__() al suo posto e se repr() ritorna una stringa, possiamo omettere quindi l'implementazione di str().


Condividi sui Social