내 패키지의 구조는 다음과 같습니다.
mobilescouter/
__init__.py #1
mapper/
__init__.py #2
lxml/
__init__.py #3
vehiclemapper.py
vehiclefeaturemapper.py
vehiclefeaturesetmapper.py
...
basemapper.py
vehicle/
__init__.py #4
vehicle.py
vehiclefeature.py
vehiclefeaturemapper.py
...
__init__.py
파일을 올바르게 작성 하는 방법을 잘 모르겠습니다 . 외모가 좋아 :__init__.py #1
__all__ = ['mapper', 'vehicle']
import mapper
import vehicle
그러나 예를 들어 어떻게 보 __init__.py #2
일까요? 광산은 :
__all__ = ['basemapper', 'lxml']
from basemaper import *
import lxml
언제 사용해야 __all__
합니까?
답변
__all__
매우 좋습니다-모듈을 자동으로 가져 오지 않고 가져 오기 명령문을 안내하는 데 도움이됩니다.
http://docs.python.org/tutorial/modules.html#importing-from-a-package
사용 __all__
및 import *
중복, __all__
필요한 것만
내가 사용하는 가장 강력한 이유 중 하나라고 생각 import *
에서 __init__.py
수입 패키지에 대한 기존의 응용 프로그램을 깨지 않고 여러 스크립트로 성장했습니다 스크립트를 리팩토링 할 수있을 것입니다. 그러나 처음부터 패키지를 디자인하는 경우. __init__.py
파일을 비워 두는 것이 가장 좋습니다 .
예를 들면 다음과 같습니다.
foo.py - contains classes related to foo such as fooFactory, tallFoo, shortFoo
그런 다음 앱이 커지고 이제는 전체 폴더입니다.
foo/
__init__.py
foofactories.py
tallFoos.py
shortfoos.py
mediumfoos.py
santaslittlehelperfoo.py
superawsomefoo.py
anotherfoo.py
초기화 스크립트는
__all__ = ['foofactories', 'tallFoos', 'shortfoos', 'medumfoos',
'santaslittlehelperfoo', 'superawsomefoo', 'anotherfoo']
# deprecated to keep older scripts who import this from breaking
from foo.foofactories import fooFactory
from foo.tallfoos import tallFoo
from foo.shortfoos import shortFoo
변경 중에 다음을 수행하도록 작성된 스크립트가 중단되지 않도록합니다.
from foo import fooFactory, tallFoo, shortFoo
답변
내 자신의 __init__.py
파일이 비어있는 경우가 더 많습니다. 특히, 나는이 결코 from blah import *
의 일환으로 __init__.py
-, 등의 기능을 직접 정의 된 패키지의 한 부분으로, 그때의 내용을 복사 어휘 것이다 클래스의 모든 종류를 얻는 수단 “패키지 가져 오기”경우 blah.py
패키지에있어 __init__.py
대신 및 제거 blah.py
( 소스 파일의 곱셈은 여기서 좋지 않습니다).
import *
관용구 (eek) 를지지한다고 주장한다면 , __all__
(자신이 가지고있는 이름의 목록을 미니어처로) 사용 하면 손해 관리에 도움이 될 수 있습니다. 일반적으로 네임 스페이스와 명시 적 가져 오기는 좋은 것이며, 개념 중 하나 또는 둘 다를 우회하여 체계적으로 우회하는 방법을 다시 고려할 것을 강력히 권장합니다!-)
답변
귀하는 __init__.py
해야 문서화 문자열을 .
모든 기능이 모듈 및 하위 패키지에 구현되어 있지만 패키지 docstring은 시작 위치를 문서화하는 장소입니다. 예를 들어, python email
package를 고려하십시오 . 패키지 문서는 목적, 배경 및 패키지 내의 다양한 구성 요소가 함께 작동하는 방법을 설명하는 소개입니다. 스핑크스 또는 다른 패키지를 사용하여 문서 문자열에서 문서를 자동으로 생성하는 경우 문서 docstring은 이러한 소개를 설명하는 데 가장 적합한 곳입니다.
다른 내용은 firecrow 와 Alex Martelli 의 탁월한 답변을 참조하십시오 .