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.

self.name = name

self.internal_name = '_' + self.name

def __get__(self, instance, instance_type):

if instance is None: return self

return getattr(instance, self.internal_name, '')

def __set__(self, instance, value):

setattr(instance, self.internal_name, value)

Com o nome da coluna armazenado no descritor Field, podemos salvar todos os

estados de cada instância diretamente no dicionário da mesma instância como

campos protegidos, usando as funções nativas setattr e getattr. À primeira vista,

isso parece ser muito mais conveniente que montar descritores com weakref para

evitar vazamento de memória.

Para definir uma classe que represente uma linha da tabela é necessário fornecer

o nome da coluna para cada atributo da classe.

class Customer(object):

# Atributos da classe

first_name = Field('first_name')

last_name = Field('last_name')

prefix = Field('prefix')

suffix = Field('suffix')

Usar a classe é muito simples. No trecho de código a seguir, podemos ver como

os descritores Field modificam o dicionário da instância __dict__ como

esperado:

foo = Customer()

print('Before:', repr(foo.first_name), foo.__dict__)

foo.first_name = 'Euclid'

print('After: ', repr(foo.first_name), foo.__dict__)

>>>

Before: '' {}

After: 'Euclid' {'_first_name': 'Euclid'}

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!