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.

dentro do módulo mais externo. Isso pode levar a bugs estranhos causados

pela interação acidental entre o seu código e os nomes sobrepostos de

múltiplos comandos import *.

O melhor é sempre evitar o uso de import * em seu código e explicitamente

importar nomes no formato from x import y.

Lembre-se

• Os pacotes no Python são módulos que contêm outros módulos. Os pacotes

permitem organizar o código em namespaces separados e não conflitantes,

com nomes de módulo únicos e absolutos.

• Pacotes simples podem ser definidos adicionando um arquivo __init__.py em

uma pasta que contém outros arquivos-fonte. Esses arquivos tornam-se os

módulos-filho do pacote que leva o nome da pasta. As pastas dos pacotes

podem conter outros pacotes.

• Podemos criar uma API explícita para um módulo listando seus nomes

visíveis publicamente no atributo especial __all__.

• Podemos esconder a implementação interna de um pacote, bastando para isso

importar apenas nomes públicos no arquivo __init__.py do pacote, ou

batizando os membros privativos com um underscore como primeiro

caractere de seu nome.

• Se estivermos trabalhando com apenas uma equipe ou com uma base única

de código, empregar __all__ para criar APIs explícitas é, provavelmente,

desnecessário.

Item 51: Defina uma Exception-raiz para isolar

chamadores e APIs

Ao definir a API de um módulo, as exceções criadas são parte da interface tanto

quanto as funções e classes definidas (consulte o Item 14: “Prefira exceções em

vez de devolver None”).

O Python tem uma hierarquia nativa de exceções para a linguagem e a

biblioteca-padrão. Há uma regra tácita na comunidade para usar sempre os tipos

nativos de exceção para reportar erros em vez de definir seus próprios novos

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!