__init_.py를 사용하여 전역 변수를 정의할 수 있습니까?
패키지의 모든 하위 모듈에서 사용할 수 있는 상수를 정의하려고 합니다.저는 가장 좋은 장소는 미래에 있을 것이라고 생각했습니다.__init__.py루트 패키지의 파일입니다.하지만 저는 이걸 어떻게 하는지 모릅니다.몇 개의 하위 패키지와 각각 여러 개의 모듈이 있다고 가정합니다.이 모듈에서 변수에 액세스하려면 어떻게 해야 합니까?
물론 이것이 완전히 잘못된 것이라면, 그리고 더 좋은 대안이 있다면, 저는 그것을 알고 싶습니다.
당신은 그것들을 넣을 수 있어야 합니다.__init__.py이것은 항상 행해집니다.
mypackage/__init__.py:
MY_CONSTANT = 42
mypackage/mymodule.py:
from mypackage import MY_CONSTANT
print "my constant is", MY_CONSTANT
그런 다음 내 모듈을 가져옵니다.
>>> from mypackage import mymodule
my constant is 42
그래도 상수가 있는 경우에는 별도의 모듈(constants.py , config.py , ...)에 상수를 넣은 다음 패키지 네임스페이스에 가져오려면 상수를 가져오는 것이 합리적입니다.
mypackage/__init__.py:
from mypackage.constants import *
그러나 패키지 모듈의 네임스페이스에 상수가 자동으로 포함되지는 않습니다.패키지의 각 모듈은 여전히 다음에서 상수를 명시적으로 가져와야 합니다.mypackage또는 에서mypackage.constants.
너는 그거 못해.각 개별 모듈의 네임스페이스로 상수를 명시적으로 가져와야 합니다.이 작업을 수행하는 가장 좋은 방법은 "config" 모듈에서 상수를 정의하고 필요한 모든 위치로 가져오는 것입니다.
# mypackage/config.py
MY_CONST = 17
# mypackage/main.py
from mypackage.config import *
어디서든 글로벌 변수를 정의할 수 있지만, 정말 나쁜 생각입니다.수입하다, 수입하다, 수입하다,__builtin__모듈을 구성하고 이 모듈에 속성을 수정 또는 추가하면 갑자기 새 정수 또는 함수가 만들어집니다.실제로 애플리케이션을 설치하면 모든 모듈에서 _() 함수를 가져오지만 아무것도 가져오지 않습니다.따라서 이것은 가능하지만, 물론 재사용 가능한 패키지나 모듈이 아닌 애플리케이션 유형 프로젝트에서만 가능합니다.
그리고 아무도 이 연습을 추천하지 않을 것이라고 생각합니다.네임스페이스에 무슨 문제가 있습니까?해당 애플리케이션에는 버전 모듈이 있으므로 다음과 같은 "글로벌" 변수를 사용할 수 있습니다.version.VERSION,version.PACKAGE_NAME기타.
config.ini 파일을 사용하여 상수를 사용하고 configparser 라이브러리를 사용하여 스크립트에서 구문 분석할 수 있음을 추가하고 싶습니다.이렇게 하면 여러 상황에 대한 상수를 가질 수 있습니다.예를 들어 두 개의 개별 URL 요청에 대한 매개 변수 상수가 있는 경우 다음과 같이 레이블을 지정합니다.
mymodule/config.ini
[request0]
conn = 'admin@localhost'
pass = 'admin'
...
[request1]
conn = 'barney@localhost'
pass = 'dinosaur'
...
저는 파이썬 웹사이트의 설명서가 매우 도움이 된다는 것을 알게 되었습니다.Python 2와 3 사이에 차이점이 있는지 확실하지 않으므로 다음은 두 가지 모두에 대한 링크입니다.
파이썬 3의 경우: https://docs.python.org/3/library/configparser.html#module-configparser
파이썬 2의 경우: https://docs.python.org/2/library/configparser.html#module-configparser
언급URL : https://stackoverflow.com/questions/1383239/can-i-use-init-py-to-define-global-variables
'source' 카테고리의 다른 글
| C로 퍼센트 기호(%)를 인쇄하려면 어떻게 해야 합니까? (0) | 2023.06.06 |
|---|---|
| 루비에서 send()는 무엇을 합니까? (0) | 2023.06.06 |
| com.google 클래스를 찾을 수 없습니다.화력 기지파이어베이스InitProvider"? (0) | 2023.06.06 |
| Firebase Analytics 디버그 보기에 아무것도 표시되지 않음 (0) | 2023.06.06 |
| Ruby 및/또는 Rails에서 사용자 정의 오류 유형을 정의하는 위치 (0) | 2023.06.06 |