Python__init__.py의 역할
1. 이 디렉터리가python의 모듈 패키지임을 표시(module package)
만약 당신이python의 관련 IDE를 사용하여 개발을 진행한다면, 디렉터리에 이 파일이 존재한다면, 이 디렉터리는module 패키지로 인식됩니다.
2. 모듈 가져오기 작업 간소화
우리의 모듈 패키지의 디렉터리 구조는 다음과 같다고 가정합니다.
.
└── mypackage
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py
만약 우리가 가장 직접적인 가져오기 방식을 사용한다면, 전체 파일을 프로젝트 디렉터리에 복사한 다음 직접 가져오십시오.
from mypackage.subpackage_1 import test11
from mypackage.subpackage_1 import test12
from mypackage.subpackage_2 import test21
from mypackage.subpackage_2 import test22
from mypackage.subpackage_3 import test31
from mypackage.subpackage_3 import test32
물론 이 예에는 파일이 적고 모듈이 크며 디렉터리가 깊으면 어떻게 가져와야 할지 기억이 안 날 수도 있습니다.(모듈 하나만 가져오려면 디렉터리에서 오래 찾아야 할 가능성이 높다)이 경우 __init__.py가 효과가 있어요.우리 먼저 이 서류가 어떻게 작동하는지 봅시다.
2.1 __init__.py는 어떻게 일합니까?
실제로 디렉토리에 __ 이 포함되어 있는 경우init__.py에서 import로 디렉토리를 가져오면 __init__.py 안의 코드.
mypackage 디렉토리에 __ 추가init__.py 파일로 실험하기:
.
└── mypackage
├── __init__.py
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py
mypackage/__init__.py에 print를 추가하면 파일이 출력됩니다.
print("You have imported mypackage")
다음은 직접 상호작용 모드로 import를 진행합니다.
>>> import mypackage
You have imported mypackage
분명히,__init__.py는 패키지를 가져올 때 실행됩니다.2.2 제어 모듈 가져오기
우리 실험 하나 더 하자, mypackage/_init__.py 다음 문장을 추가합니다.
from subpackage_1 import test11
mypackage를 가져와 보겠습니다.
>>> import mypackage
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in <module>
from subpackage_1 import test11
ImportError: No module named 'subpackage_1'
잘못 보고했어요...어떻게 된 거야?원래, 우리가 import를 실행할 때, 현재 디렉터리는 변하지 않습니다. (하위 디렉터리를 실행하는 파일이라도) 완전한 패키지 이름이 필요합니다.
from mypackage.subpackage_1 import test11
종합하면, 우리는 __init__.py 기본적으로 가져올 모듈을 지정합니다2.3 게으름 피우는 가져오기 방법
때때로 우리는 가져오기를 할 때 게으름을 피우며 가방의 모든 내용을 가져온다
from mypackage import *
이게 어떻게 이루어진 거지? __all__ 변수는 바로 이 일을 하는 것이다.__all__ 모듈 목록을 연결했습니다. from xx import*를 실행할 때 목록의 모듈을 가져옵니다.우리는__init__.py를 (으)로 수정합니다.
__all__ = ['subpackage_1', 'subpackage_2']
여기에 subpackage가 포함되어 있지 않습니다_3, __를 증명하기 위해all__ 모든 하위 디렉터리를 가져오는 것이 아니라 작용합니다.
>>> from mypackage import *
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']
>>>
>>> dir(subpackage_1)
['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
하위 디렉터리의 모듈을 가져오지 않았습니다!!!이 예에서 가져오는 것은
from mypackage import subpackage_1, subpackage_2
따라서 가져오기 작업은subpackage_를 계속 찾습니다1 및 subpackage_2에서 __init__.py 및 실행.(단, import*는 실행되지 않습니다.)저희는 subpackage에서_1 추가 __init__.py 파일:
__all__ = ['test11', 'test12']
# test11
from mypackage.subpackage_1 import test11
다시 가져오세요.
>>> from mypackage import *
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']
>>>
>>> dir(subpackage_1)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'test11']
하위 패키지의 모든 모듈을 가져오려면 더 정확하게 지정해야 합니다.
>>> from mypackage.subpackage_1 import *
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'test11', 'test12']
3. 구성 모듈의 초기화 작업알고 있습니다__init__.py의 작업 원리를 이해하면 이 파일이 정상적인 python 코드 파일이라는 것을 이해할 수 있을 것이다.
따라서 이 파일에 초기화 코드를 넣을 수 있습니다.
Python__에 대한 간단한 이야기init__.py의 역할에 대한 기사는 여기까지입니다.init__.py 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.