하위 모듈 가져 오기가있는 네임 스페이스

Dshanahan

__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()하지만 결과는 동일합니다.

업데이트
호기심에서, 나는 또한 수입 foobarbar.py인쇄 globals()'bar'포함되지 않았습니다. 그렇다면 내 모듈이 __init__.py파일 내의 네임 스페이스에만 추가 된 것 같습니다 .

alex_noname

댓글에서 @MisterMiyagi의 모든 크레딧.

나는 공식 문서 5.4.2 의 인용문으로 만 이것을 확인할 것 입니다. 서브 모듈 :

임의의 메커니즘 [...]을 사용하여 하위 모듈이로드 되면 하위 모듈 객체에 대한 부모 모듈의 네임 스페이스에 바인딩이 배치됩니다 .

패키지는 경우 귀하의 경우 예를 들어, foo서브 모듈을 가지고 bar, 수입 후 foo.bar, foo속성있을 것이다 bar서브 모듈에 바인딩됩니다 foo.bar.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하위 모듈을 부모 네임 스페이스로 가져 오는 방법은 무엇입니까?

분류에서Dev

파이썬 가져 오기 모듈 전역 로컬 네임 스페이스

분류에서Dev

모듈이 구문 상 거짓 네임 스페이스로 가져 오나요?

분류에서Dev

모듈과 네임 스페이스가없는 form_for

분류에서Dev

특정 네임 스페이스 (모듈)로 범위가 지정된 상수 (클래스) 찾기

분류에서Dev

네임 스페이스에 추가하지 않고 모듈에서 외부 패키지를 한 번 가져 오기

분류에서Dev

typescript : 새 네임 스페이스가 아닌 모든 클래스 가져 오기

분류에서Dev

사용자 지정 py 모듈을 가져 오지만 로컬 네임 스페이스 내에서 재정의하는 방법은 무엇입니까?

분류에서Dev

호출되는 메서드에 네임 스페이스를 자동으로 추가하는 모듈

분류에서Dev

진입 점에서 파이썬 모듈을 가져올 때 부모 로깅 네임 스페이스를 존중하는 방법

분류에서Dev

노드가 아닌 브라우저에서 모듈을 네임 스페이스하는 방법

분류에서Dev

GMock을 사용하는 네임 스페이스가있는 모의 방법

분류에서Dev

API 구조 구축, 모듈 멤버의 범위가 잘못된 네임 스페이스로 지정됨

분류에서Dev

상위 네임 스페이스가있는 중첩 네임 스페이스의 오버로드 해결

분류에서Dev

C ++ 17에서 네임 스페이스 및 하위 네임 스페이스의 연산자 오버로드가 모호합니다.

분류에서Dev

import modulename의 사용은 가져온 모듈의 네임 스페이스와 어떤 관련이 있습니까?

분류에서Dev

여러 네임 스페이스 (XBRL)가있는 문서에서 하위 메모 계산

분류에서Dev

여러 네임 스페이스 (XBRL)가있는 문서에서 하위 메모 계산

분류에서Dev

Rails의 중첩 된 네임 스페이스가 네임 스페이스와 동일한 이름의 모델에 액세스하는 중 오류 발생

분류에서Dev

파이썬으로 가져온 후 모듈의 전체 네임 스페이스를 얻는 방법

분류에서Dev

병합 된 네임 스페이스에서 모듈을 가져 오려고 할 때 ModuleNotFoundError

분류에서Dev

네임 스페이스가있는 모델-잘못된 테이블 이름 (네임 스페이스 없음)

분류에서Dev

네임 스페이스가 있거나없는 Python 가져 오기 패키지

분류에서Dev

Vuex : [vuex] 모듈 네임 스페이스가 mapState ()에 없습니다. | mapGetters () : X /

분류에서Dev

정적 멤버가있는 클래스와 typescript의 네임 스페이스 / 모듈 간의 차이점

분류에서Dev

네임 스페이스가있는 XElement 하위 요소 값을 가져올 수 없습니다.

분류에서Dev

Vuex에서 여러 네임 스페이스 모듈을 호출하는 방법

분류에서Dev

Visual Studio 2015에서 프로젝트의 모든 클래스에 하위 네임 스페이스 추가

분류에서Dev

하위 모듈에서 생성자 함수를 사용할 때 예기치 않은 "double"네임 스페이스

Related 관련 기사

  1. 1

    하위 모듈을 부모 네임 스페이스로 가져 오는 방법은 무엇입니까?

  2. 2

    파이썬 가져 오기 모듈 전역 로컬 네임 스페이스

  3. 3

    모듈이 구문 상 거짓 네임 스페이스로 가져 오나요?

  4. 4

    모듈과 네임 스페이스가없는 form_for

  5. 5

    특정 네임 스페이스 (모듈)로 범위가 지정된 상수 (클래스) 찾기

  6. 6

    네임 스페이스에 추가하지 않고 모듈에서 외부 패키지를 한 번 가져 오기

  7. 7

    typescript : 새 네임 스페이스가 아닌 모든 클래스 가져 오기

  8. 8

    사용자 지정 py 모듈을 가져 오지만 로컬 네임 스페이스 내에서 재정의하는 방법은 무엇입니까?

  9. 9

    호출되는 메서드에 네임 스페이스를 자동으로 추가하는 모듈

  10. 10

    진입 점에서 파이썬 모듈을 가져올 때 부모 로깅 네임 스페이스를 존중하는 방법

  11. 11

    노드가 아닌 브라우저에서 모듈을 네임 스페이스하는 방법

  12. 12

    GMock을 사용하는 네임 스페이스가있는 모의 방법

  13. 13

    API 구조 구축, 모듈 멤버의 범위가 잘못된 네임 스페이스로 지정됨

  14. 14

    상위 네임 스페이스가있는 중첩 네임 스페이스의 오버로드 해결

  15. 15

    C ++ 17에서 네임 스페이스 및 하위 네임 스페이스의 연산자 오버로드가 모호합니다.

  16. 16

    import modulename의 사용은 가져온 모듈의 네임 스페이스와 어떤 관련이 있습니까?

  17. 17

    여러 네임 스페이스 (XBRL)가있는 문서에서 하위 메모 계산

  18. 18

    여러 네임 스페이스 (XBRL)가있는 문서에서 하위 메모 계산

  19. 19

    Rails의 중첩 된 네임 스페이스가 네임 스페이스와 동일한 이름의 모델에 액세스하는 중 오류 발생

  20. 20

    파이썬으로 가져온 후 모듈의 전체 네임 스페이스를 얻는 방법

  21. 21

    병합 된 네임 스페이스에서 모듈을 가져 오려고 할 때 ModuleNotFoundError

  22. 22

    네임 스페이스가있는 모델-잘못된 테이블 이름 (네임 스페이스 없음)

  23. 23

    네임 스페이스가 있거나없는 Python 가져 오기 패키지

  24. 24

    Vuex : [vuex] 모듈 네임 스페이스가 mapState ()에 없습니다. | mapGetters () : X /

  25. 25

    정적 멤버가있는 클래스와 typescript의 네임 스페이스 / 모듈 간의 차이점

  26. 26

    네임 스페이스가있는 XElement 하위 요소 값을 가져올 수 없습니다.

  27. 27

    Vuex에서 여러 네임 스페이스 모듈을 호출하는 방법

  28. 28

    Visual Studio 2015에서 프로젝트의 모든 클래스에 하위 네임 스페이스 추가

  29. 29

    하위 모듈에서 생성자 함수를 사용할 때 예기치 않은 "double"네임 스페이스

뜨겁다태그

보관