2009-09-29 16 views
16

Duplicar posible:
Perl's AUTOLOAD in Python (getattr on a module)Python Auto Importación

estoy procedentes de un fondo de PHP y tratando de aprender Python, y quiero estar seguro de hacer las cosas de la "Python manera "en lugar de cómo me he desarrollado antes.

Mi pregunta proviene del hecho de que en PHP5 puede configurar su código, por lo que si intenta llamar a una clase que no existe en el espacio de nombres, se ejecutará primero una función que cargará la clase y le permitirá continuar como si ya estuviera cargado. Las ventajas de esto es que las clases no se cargaron a menos que se las llamara, y no tenía que preocuparse de cargar clases antes de usarlas.

En python, hay mucho énfasis en la declaración de importación, ¿es una mala práctica intentar un truco de importación automática con python, para aliviar la necesidad de una declaración de importación? He encontrado this module que ofrece importación automática, sin embargo, no sé si esa es la mejor manera de hacerlo, o si la importación automática de módulos es algo que se recomienda, ¿no?

+0

Esto es un debate recurrente en http://stackoverflow.com/questions/1024455/autoload-in-python –

Respuesta

12

importaciones sirven al menos otros dos propósitos importantes además de hacer los módulos o contenidos de los módulos disponibles:

  1. Ellos sirven como una especie de declaración de intenciones - "Este módulo utiliza los servicios de este otro módulo" o "este módulo usa servicios que pertenecen a una cierta clase" - por ejemplo Si está haciendo una revisión de seguridad para el código de manejo de sockets, puede comenzar mirando solo los módulos que importan socket (u otros módulos relacionados con la red)
  2. Las importaciones sirven como un proxy para la complejidad de un módulo. Si se encuentra con docenas de líneas de importaciones, puede ser momento de reconsiderar su separación de preocupaciones dentro del módulo, o dentro de su aplicación como un todo. Esta es también una buena razón para evitar las importaciones de tipo "from foo import *".
9

En Python, la gente generalmente evita las importaciones de automóviles, simplemente porque no vale la pena el esfuerzo. Puede eliminar ligeramente los costos de inicio, pero de lo contrario, no hay (o no debería haber) un efecto significativo. Si tiene módulos que son caros de importar y hacen muchas cosas que no es necesario hacer, en lugar de eso, vuelva a escribir el módulo antes de demorar la importación.

Dicho esto, no hay nada intrínsecamente incorrecto con las importaciones de automóviles. Debido a la naturaleza de proxy, puede haber algunas dificultades (por ejemplo, cuando se mira algo que aún no se ha importado). Varias bibliotecas de auto importación están flotando.

1

Si está aprendiendo Python y quiere hacer las cosas a la manera de Python, entonces simplemente importe los módulos. Es muy inusual encontrar autoimportaciones en código Python.

1

Puede importar automáticamente los módulos, pero lo que más he necesitado importar ha sido alrededor de 10, y eso es después de haber añadido funciones al programa original. No importará mucho, y los nombres son muy fáciles de recordar.