2012-01-16 6 views
5

Tengo un archivo helpers.py que define unos 30 funciones de ayuda para ser exportados de la siguiente manera:exportar automáticamente todas las funciones (vs __all__ especificar manualmente)

from helpers import * 

Para poder hacer esto, he añadido las 30 funciones a la variable __all__. ¿Puedo automáticamente exportar todas las funciones, en lugar de tener que especificar cada una?

+0

supongo que hay algunos métodos no exportada en su helpers.py, de lo contrario, '__all__' no será útil ... –

+2

Si no define' __all__', la sentencia importará todos los nombres públicos (aquellos que no comiencen con un guión bajo '_') . – martineau

Respuesta

13

Sí, simplemente no especificando __all__.

7

En realidad creo que Gandaro es correcto, usted no tiene que especificar __all__, pero si, por alguna razón desconocida, que tendría que hacerlo, entonces, puede filtrar las palabras clave de dir():

__all__ = [ helper for helper in dir() if helper == MY_CONDITION ] 
+0

Buen punto. De hecho, puede determinar los contenidos de '__all__' de una manera aún más elaborada en su módulo, si lo desea, es decir, no está limitado a una sola declaración. – martineau

6

Si no se define __all__ entonces todas las funciones en el módulo se importará llamando from helpers import *

Si usted tiene algunas funciones que le gustaría mantener en privado, entonces se podría prefijar con sus nombres un guion bajo De mis pruebas, esto detiene las funciones de ser importado por import *

Por ejemplo, en helper.py:

def _HiddenFunc(): 
    return "Something" 

def AnActualFunc(): 
    return "Hello" 

continuación:

>>> from helper import * 
>>> AnActualFunc() 
'Hello' 
>>> _HiddenFunc() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '_HiddenFunc' is not defined 
Cuestiones relacionadas