A menudo, en mis propias bibliotecas personales de Python, hago algo como esto:
class MyClass:
# ...
def plot(self):
import someGraphicsLibrary as graphicslib
graphicslib.plot(self.data)
La razón es que la inicialización someGraphicsLibrarylleva algo de tiempo, hasta unos segundos para una de las bibliotecas que uso. No siempre necesito trazar mis resultados cuando uso esta clase, por lo que tiene sentido no importarlo hasta el momento en que se usa, si es que lo hace.
Esto parece funcionar bien, pero no creo que lo haya visto en el código de otra persona. Entonces mi pregunta es simplemente si esto se considera una buena práctica. ¿Hay alguna trampa oculta que se puede esperar al hacer las cosas de esta manera?

Respuestas:
Esto no suele ser una buena práctica, por varias razones:
Sin embargo, a veces esta es una buena idea, por ejemplo:
numpyen su__array__()método. Pero es posible que no desee dependernumpyde la otra funcionalidad de su módulo, por lo que es mejor importarnumpydentro__array__()para evitar tomar la dependencia adicional cuando no es necesario. Esto no sufre los problemas 1 y 2 porquenumpyya se importó una vez antes (¡es lo que llama__array__()en primer lugar!), Y no sufre el problema 3 porquenumpyno es una dependencia "real" de su módulo.import pdb; pdb.set_trace(). No desea colocarloimport pdben la parte superior del módulo porque el punto de interrupción es una línea de código temporal que se eliminará, y mover la importación muy lejos lo haría innecesariamente difícil. Esto estaba obsoleto cuandobreakpoint()se agregó el incorporado , por lo que ahora no necesita una importación en línea.fuente
MyClassno es un sustantivo significativo, así que creo que estás sacando conclusiones.