__all__
내 패키지의 모듈 을 설정 하기 위해 간단한 목록 이해를 사용하고 싶습니다. 내 모듈 중 하나에서 무언가를 가져올 때 내가 가져 오는 것만이 아니라 모듈 이름이 네임 스페이스에 추가된다는 것을 알았습니다. 내장 또는 타사 패키지를 가져올 때와는 다릅니다.
- foo
- __init__.py
- bar.py
- baz.py
__init__.py
import os as _os
from numpy.random import randint as _randint
import foo.bar as _bar
from foo.baz import foobar
__all__ = [x for x in globals() if not x.startswith('_')]
나는 기대:
>>> import foo
>>> foo.__all__
['foobar']
그러나 나는 얻는다 :
>>> import foo
>>> foo.__all__
['bar', 'baz', 'foobar']
__all__
필터링 을 위해 목록 이해력을 확장 할 수 있다는 것을 알고 ModuleType
있지만 내 모듈에 대해 동작이 다른 이유가 궁금합니다. 다른 패키지와 마찬가지로 이것을 처리하기 위해 선행 밑줄을 사용할 수 있기를 바랍니다. 나는 또한 사용하여 시도 dir()
, locals()
그리고 vars()
대신 globals()
하지만 결과는 동일합니다.
업데이트
호기심에서, 나는 또한 수입 foobar
에 bar.py
인쇄 globals()
및 'bar'
포함되지 않았습니다. 그렇다면 내 모듈이 __init__.py
파일 내의 네임 스페이스에만 추가 된 것 같습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다