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 someGraphicsLibrary
lleva 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:
numpy
en su__array__()
método. Pero es posible que no desee dependernumpy
de la otra funcionalidad de su módulo, por lo que es mejor importarnumpy
dentro__array__()
para evitar tomar la dependencia adicional cuando no es necesario. Esto no sufre los problemas 1 y 2 porquenumpy
ya se importó una vez antes (¡es lo que llama__array__()
en primer lugar!), Y no sufre el problema 3 porquenumpy
no es una dependencia "real" de su módulo.import pdb; pdb.set_trace()
. No desea colocarloimport pdb
en 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
MyClass
no es un sustantivo significativo, así que creo que estás sacando conclusiones.