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(albert.average_grade())

>>>

81.5

Se for necessário, você pode escrever métodos retrocompatíveis que auxiliem a

migração do modelo anterior, no estilo API, para a nova hierarquia de objetos.

Lembre-se

• Evite criar dicionários com valores que sejam outros dicionários ou tuplas

muito longas.

• Use namedtuple para criar contêineres de dados leves e imutáveis antes de

precisar da flexibilidade de uma classe completa.

• Migre seu código de registro para uma hierarquia de classes auxiliares

quando seus dicionários internos de estado começarem a ficar muito

complicados.

Item 23: Aceite funções para interfaces simples em vez

de classes

Muitas as APIs nativas do Python permitem personalizar seu comportamento

pela passagem de uma função. Esses ganchos (hooks) são usados pelas APIs

para chamar o código do usuário enquanto executam (operação conhecida como

callback). Por exemplo, o método sort do tipo list aceita o argumento opcional

key que é usado para determinar cada valor do índice para classificação. No

exemplo a seguir, uma lista de nomes é ordenada com base em seus

comprimentos pela passagem de uma expressão lambda como o gancho key:

names = ['Socrates', 'Archimedes', 'Plato', 'Aristotle']

names.sort(key=lambda x: len(x))

print(names)

>>>

['Plato', 'Socrates', 'Aristotle', 'Archimedes']

Em outras linguagens, podemos esperar que os ganchos sejam definidos por uma

classe abstrata. No Python, muitos ganchos são apenas unções sem estado

(stateless) com argumentos e valores de retorno bem definidos. As funções são

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!