2012-01-16 4 views
5

Mam plik helpers.py który definiuje około 30 funkcji pomocniczych, które mają być eksportowane, co następuje:Automatyczne eksportowanie wszystkich funkcji (vs ręcznie określającego __all__)

from helpers import * 

Aby móc to zrobić, dodałem wszystkie 30 funkcji do zmiennej __all__. Czy mogę automatycznie eksportować wszystkie funkcje, zamiast określać każdą z nich?

+0

Przypuszczam, istnieje kilka metod niewymagających eksportowane w swojej helpers.py, inaczej '__all__' nie będzie użyteczny ... –

+2

Jeśli nie zdefiniujesz' __all__', wszystkie publiczne nazwy (te, które nie zaczynają się od znaku podkreślenia "_") zostaną zaimportowane przez instrukcję . – martineau

Odpowiedz

13

Tak, po prostu nie określając __all__.

7

Właściwie myślę Gandaro ma rację, nie trzeba określić __all__, ale jeśli z jakiegoś nieznanego powodu, trzeba by zrobić to wtedy można filtrować słowa kluczowe z dir():

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

Dobra uwaga. W rzeczywistości możesz określić zawartość '__all__' w jeszcze bardziej złożony sposób w swoim module, jeśli chcesz - tzn. Nie jesteś ograniczony do jednej instrukcji. – martineau

6

Jeśli nie definiują __all__ wówczas wszystkie funkcje w module zostaną przywiezione przez wywołanie from helpers import *

Jeśli masz jakieś funkcje, które chcesz zachować prywatny, a następnie można poprzedzić ich nazwy z podkreślenie. Z moich badań, to zatrzymuje funkcje od importowanych przez import *

na przykład w helper.py:

def _HiddenFunc(): 
    return "Something" 

def AnActualFunc(): 
    return "Hello" 

wówczas:

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