5.2. Importar módulos usando from módulo import

Python tiene dos maneras de importar módulos. Ambas son útiles, y debe saber cuándo usar cada cual. Una de las maneras, import módulo, ya la hemos visto en Sección 2.4, “Todo es un objeto”. La otra hace lo mismo, pero tiene diferencias sutiles e importantes.

Ésta es la sintaxis básica de from módulo import:


from UserDict import UserDict

Esto es similar a la sintaxis de import módulo que conoce y adora, pero con una diferencia importante: los atributos y métodos del módulo importado types se sitúan directamente en el espacio de nombres local, de manera que están disponibles directamente, sin necesidad de acceder a ellos mediante el nombre del módulo. Puede importar elementos individuales o usar from módulo import * para importarlo todo.

nota
from módulo import * en Python es como use módulo en Perl; import módulo en Python es como require módulo en Perl.
nota
from módulo import * en Python es como import módulo.* en Java; import módulo en Python es como import módulo en Java.

Ejemplo 5.2. import módulo frente a from módulo import

>>> import types
>>> types.FunctionType             1
<type 'function'>
>>> FunctionType                   2
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
NameError: There is no variable named 'FunctionType'
>>> from types import FunctionType 3
>>> FunctionType                   4
<type 'function'>
1 El módulo types no contiene métodos; sino sólo atributos para cada tipo de objeto en Python. Observe que el atributo, FunctionType, debe cualificarse usando el nombre del módulo, types.
2 FunctionType no ha sido definida en este espacio de nombres; existe sólo en el contexto de types.
3 Esta sintaxis importa el atributo FunctionType del módulo types directamente en el espacio de nombres local.
4 Ahora se puede acceder directamente a FunctionType, sin hacer referencia a types.

¿Cuándo debería usar from módulo import?

Aparte de esto, es sólo cuestión de estilo, y verá código en Python escrito de ambas maneras.

atención
Utilice from module import * lo menos posible, porque hace difícil determinar de dónde vino una función o atributo en particular, y complica más la depuración y el refactorizado.

Lecturas complementarias sobre técnicas de importar módulos