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?
1
Esto es simplemente una forma de carga diferida , que no es muy especial.
—
Doc Brown
Además de ser un poco feo, no hay una razón real por la que no puedas hacer esto. Y si la importación de la biblioteca lleva tanto tiempo, incluso hay una causa legítima para hacerlo. Me gustaría hacer esto raramente. La mayoría de las importaciones no deberían ser tan lentas.
—
Neil
@DocBrown No digo que sea especial, solo pregunto si se considera una buena / mala práctica en Python específicamente.
—
Nathaniel
@Nathaniel: parece haber una creencia supersticiosa en la existencia de "mejores prácticas" absolutas entre muchos desarrolladores, lo cual no tiene sentido, en mi humilde opinión, cualquier "práctica" tiene pros y contras, y lo que es bueno o malo solo puede evaluarse en el específico contexto. Su ejemplo anterior me parece razonable, es simple y claro, y el único inconveniente real es que es más difícil ver todas las dependencias de un módulo de un vistazo (que es el punto # 3 en la respuesta de Kevin). Entonces, si crees que la mejora del rendimiento vale la pena, entonces esta práctica es buena, si no, esta práctica es mala.
—
Doc Brown