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.

data = ValidatingDB()

print('exists:', data.exists)

print('foo: ', data.foo)

print('foo: ', data.foo)

>>>

Called __getattribute__(exists)

exists: 5

Called __getattribute__(foo)

foo: Value for foo

Called __getattribute__(foo)

foo: Value for foo

Na eventualidade de uma propriedade dinamicamente acessada não existir,

podemos elevar uma exceção AttributeError para provocar o comportamentopadrão

de atributo ausente do Python, tanto para __getattr__ como para

__getattribute__.

class MissingPropertyDB(object):

def __getattr__(self, name):

if name == 'bad_name':

raise AttributeError('%s is missing' % name)

# ...

data = MissingPropertyDB()

data.bad_name

>>>

AttributeError: bad_name is missing

Qualquer código em Python que implemente funcionalidade genérica

normalmente depende da função nativa hasattr para determinar a existência ou

não de uma propriedade e de getattr, outra função nativa, para ler os valores

armazenados nas propriedades. Essas funções também consultam o dicionário da

instância para saber o nome do atributo antes de chamar __getattr__.

data = LoggingLazyDB()

print('Before: ', data.__dict__)

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!