2011-01-14 18 views
9

Estoy trabajando en un proyecto en el que necesito utilizar un módulo de terceros en diferentes archivos de proyecto (archivos .py). La situación es así.importaciones múltiples de python para un módulo común

Tengo un archivo "abc.py" que importa el módulo de terceros "common.py". Hay algunos otros archivos que también importan "common.py". Todos estos archivos también se importan en el archivo de proyecto principal "main.py".

Parece redundante importar el mismo módulo en su proyecto varias veces en diferentes archivos ya que "main.py" también está importando todos los archivos del proyecto.

Tampoco estoy seguro de cómo el tamaño del proyecto se ve afectado por múltiples instrucciones de importación.

¿Alguien puede ayudarme a hacer las cosas un poco más simples?

Respuesta

21

Importando solo cargas un módulo una vez. Cualquier importación después de eso simplemente lo agrega al espacio de nombre actual.

Solo importe cosas en los archivos que necesita que estén disponibles y deje que Python se encargue de resolver la carga de los módulos.

3

Sí, tienes razón, este comportamiento realmente existe en Python. Es decir, si el código de usuario intenta importar el mismo módulo de diferentes maneras, por ejemplo - import a y import A.a (donde a.py archivo se encuentra en A paquete y la primera import se hace desde dentro el paquete A mientras que el otro import se presenta como desde el exterior).

Esto puede suceder fácilmente en la vida real, especialmente para paquetes de varios niveles Python proyectos.

He experimentado un efecto secundario de tal comportamiento, es decir, el comando isinstance no funciona cuando un objeto se compara con una clase que está definida en el módulo que se importó de esa manera.

La solución que puedo pensar es redefinir la función __builtin__. __ import__ para realizar su trabajo de forma más inteligente.

Cuestiones relacionadas