15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

class BetterClass(object):

def __init__(self, x, y):

# ...

def __repr__(self):

return 'BetterClass(%d, %d)' % (self.x, self.y)

Agora, o valor de repr é muito mais útil.

obj = BetterClass(1, 2)

print(obj)

>>>

BetterClass(1, 2)

Quando não temos controle sobre a definição de classe, podemos nos valer do

dicionário da instância do objeto, que está armazenado no atributo __dict__. No

exemplo a seguir, mostramos na tela o conteúdo de uma instância da classe

“opaca” (isto é, cujo interior não conseguimos enxergar) chamada OpaqueClass:

obj = OpaqueClass(4, 5)

print(obj.__dict__)

>>>

{'y': 5, 'x': 4}

Lembre-se

• Chamar print em tipos nativos do Python produzirá strings legíveis por nós,

meros humanos, dos valores armazenados nesses tipos. O valor é mostrado,

mas as informações sobre o tipo não.

• Podemos usar repr em tipos nativos do Python para obter uma versão em

string do valor. Essas strings do repr podem ser passadas à função nativa eval

para obter o valor original.

• Os formatadores %s produzem strings legíveis para os humanos como str. Já

o formatador %r produz strings exibíveis como repr.

• Podemos definir o método __repr__ para customizar a representação exibível

de uma classe e oferecer informações de depuração mais detalhadas.

• Sempre é possível consultar o atributo _dict__ de um objeto para conhecer

suas entranhas.

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!