2013-06-21 5 views
2

__all으로 모듈을 관리하는 방법을 이해하려고합니다.파이썬 모듈 및 __all__

from database import session 

I가 라인 __all__ = ['session'] 또는 __all__ = ['engine.session']을 추가하려고 :

main.py 
|=> /database 
    |=> __init__.py 
    |=> engine (with variables engine, session, etc.) 

이 지금은 같은 database 모듈에서 sessionengine 인스턴스를 직접 가져올 수 있도록하려면 예를 들어, 나는 구조화 된 코드를 다음 한 __init__py하지만 가져 오기를 시도 할 때 예외가 발생했습니다 AttributeError: 'modile' object has not attribute 'engine.session'.

원하는 동작을 달성 할 수있는 방법이 있습니까?

답변

2

__all__의 목록 이름은 항목을 모듈로 가져 오지 않습니다. from database import * 구문을 사용한 경우 해당 모듈에서 가져올 목록 이름 만 있으면됩니다.

가져 오기 sessiondatabase/__init__.py로 :

from .engine import session 
+0

이 솔루션을 주셔서 감사합니다,하지만, 난 여전히 질문이 - 내가 작성에 대해 귀찮게하지 않습니다 수 __init __ py''모든 필요한 클래스/함수/변수를 importting합니다. '__all__' - 이미 가져온 것들입니다. 그럼, __all__을 사용해야하는 이유는 무엇입니까? –

+0

@ AlexG.P .:'__all__'을 사용하여 어떤 이름이 'importable'인지 표시합니다. 누군가가 데이터베이스로부터 가져 오기 *를하면 모듈의 네임 스페이스에있는 모든 ** 이름보다는 ** __all__에 나열된 이름 만 가져옵니다. –

+0

아, 수입 유형의 감소를 줄일 수는 있지만 수입은 늘리지 않습니다. 대단히 감사합니다. –