Muitas vezes, nas minhas bibliotecas pessoais do Python, faço algo assim:
class MyClass:
# ...
def plot(self):
import someGraphicsLibrary as graphicslib
graphicslib.plot(self.data)
O motivo é que a inicialização someGraphicsLibrary
leva algum tempo, até alguns segundos para uma das bibliotecas que eu uso. Nem sempre preciso plotar meus resultados quando uso essa classe; portanto, faz sentido não importá-lo até o momento em que ele é realmente usado, se for o caso.
Isso parece funcionar bem, mas acho que não vi no código de ninguém. Portanto, minha pergunta é simplesmente se isso é considerado uma boa prática. Existem armadilhas ocultas que se espera ao fazer as coisas dessa maneira?
Respostas:
Isso geralmente não é uma boa prática, por vários motivos:
No entanto, às vezes isso é uma boa ideia, por exemplo:
numpy
seu__array__()
método. Mas você pode não querer dependernumpy
das outras funcionalidades do seu módulo; portanto, é melhor importar apenas onumpy
interior__array__()
para evitar a dependência extra quando não for necessário. Isso não sofre dos problemas 1 e 2 porquenumpy
já foi importado uma vez antes (é o que está chamando__array__()
em primeiro lugar!), E não sofre do problema 3 porquenumpy
não é uma dependência "real" do seu módulo.import pdb; pdb.set_trace()
. Você não deseja colocarimport pdb
na parte superior do módulo porque o ponto de interrupção é uma linha temporária de código que será excluída, e mover a importação para longe tornaria isso desnecessariamente difícil. Isso ficou obsoleto quando o builtinbreakpoint()
foi adicionado, então agora você não precisa de uma importação embutida.fonte
MyClass
não é um substantivo significativo, então eu acho que você está tirando conclusões precipitadas.