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.

A primeira técnica é alterar a ordem das importações. Por exemplo, se

importarmos o módulo dialog mais para o fim do módulo app, depois que seu

conteúdo tiver sido executado, a exceção AttributeError deixa de existir.

# app.py

class Prefs(object):

# ...

prefs = Prefs()

import dialog # Transferido para cá

dialog.show()

Isso funciona porque, quando o módulo dialog é carregado mais tarde, a

importação recursiva de app dentro dele vai encontrar um app.prefs já definido

(passo 5 já está quase terminado para o módulo app).

Embora evitemos o AttributeError, essa técnica fere o disposto no Guia de Estilo

PEP 8 (consulte o Item 2: “Siga o Guia de Estilo PEP 8”). O guia sugere que

sempre coloquemos os imports no início dos arquivos em Python. Isso esclarece,

para quem for ler seu código-fonte mais tarde, quais são as dependências desse

arquivo, além de garantir que qualquer módulo do qual seu código dependa está

no escopo correto e disponível para todo o código em seu módulo.

Posicionar as importações mais tarde no arquivo pode deixar seu código muito

frágil e fazer com que pequenas mudanças nele causem mau funcionamento do

módulo. Devemos, portanto, evitar reordenar as importações para resolver

problemas de dependência circular.

Importar, configurar, executar

Uma segunda solução para as importações circulares é fazer com que os

módulos minimizem os efeitos colaterais no momento da importação. Nossos

módulos devem apenas definir funções, classes e constantes. A execução desses

elementos deve ser evitada. Cada um dos módulos deve fornecer uma função

própria de configuração (chamada, por exemplo, de configure) que podemos

chamar depois que todos os módulos terminarem de ser importados. A finalidade

de configure é preparar o estado de cada módulo acessando os atributos de

outros módulos. Podemos rodar configure depois que todos os módulos tiverem

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!