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.

print('Still', bucket)

>>>

Initial Bucket(max_quota=0, quota_consumed=0)

Filled Bucket(max_quota=100, quota_consumed=0)

Had 99 quota

Now Bucket(max_quota=100, quota_consumed=99)

Not enough for 3 quota

Still Bucket(max_quota=100, quota_consumed=99)

A melhor parte é que o código usando Bucket.quota não precisa ser modificado

ou saber que a classe foi modificada. O novo modo de uso de Bucket faz a coisa

certa sozinho e acessa max_quota e quota_consumed diretamente.

Eu gosto especialmente de @property porque permite fazer progressos

incrementais em direção a um modelo de dados melhor. Examinando o código

do exemplo anterior, Bucket, possivelmente o leitor tenha pensado consigo

mesmo: “fill e deduct deveriam ter sido implementados como método de

instância, para começar!” Embora você provavelmente esteja certo (consulte o

Item 22: “Prefira classes auxiliares em vez de administrar registros complexos

com dicionários e tuplas”), na prática existem situações em que os objetos são

inicialmente implementados com interfaces definidas de forma muito ruim ou

funcionam como contêineres de dados sem nenhuma inteligência. Isso acontece

à medida que o código cresce ao longo do tempo, a quantidade de níveis de

escopo fica maior, outros programadores contribuem com código sem que

ninguém pense na higiene a longo prazo, e assim por diante.

@property é uma ferramenta que ajuda a resolver problemas que encontramos

no dia a dia do mundo real, mas não abuse dela! Se você perceber que está

repetidamente estendendo métodos de @property, provavelmente chegou a hora

de refatorar sua classe. Construir avenidas para pavimentar o projeto malfeito de

seu código nunca é boa ideia.

Lembre-se

• Use @property para implementar novas funcionalidades e atributos de

instâncias existentes.

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!