15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

# Esses atributos serão preenchidos pela metaclasse.

self.name = None

self.internal_name = None

# ...

Com a metaclasse, a nova classe-base DatabaseRow e o novo descritor Field, a

definição de classe para a linha na tabela no banco de dados não precisa mais

depender da redundância anterior.

class BetterCustomer(DatabaseRow):

first_name = Field()

last_name = Field()

prefix = Field()

suffix = Field()

O comportamento da nova classe é idêntico ao da antiga.

foo = BetterCustomer()

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

foo.first_name = 'Euler'

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

>>>

Before: '' {}

After: 'Euler' {'_first_name': 'Euler'}

Lembre-se

• As metaclasses permitem modificar os atributos de uma classe antes de a

classe ser definida por completo.

• Os descritores e metaclasses formam uma combinação poderosa para

comportamento declarativo e introspecção em tempo de execução.

• Podemos evitar tanto os vazamentos de memória quanto o uso o módulo

weakref empregando metaclasses e descritores trabalhando em equipe.

1 N. do T.: Na vida real, um balde furado funciona como um “buffer” de água. O fluxo de água que entra no

balde pela boca pode ser inconstante, com diferentes quantidades de água em cada momento e até mesmo

alguns períodos sem entrar água alguma. Entretanto, pelo furo localizado no fundo do balde sai um

gotejamento constante. Caso o fluxo de entrada seja muito intenso, mesmo com o furo, o balde derrama.

Um balde furado pode ser usado, portanto, para regular e homogeneizar o fluxo de água em determinado

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!