__init__.py 파일에 파이썬 코드를 넣는 이유
__init__.py
파일 에 어떤 유형의 코드를 넣을 것인지 그리고 이와 관련된 모범 사례는 무엇인지 찾고 있습니다. 아니면 일반적으로 나쁜 습관입니까?
이를 설명하는 알려진 문서에 대한 참조도 대단히 감사합니다.
라이브러리와 프레임 워크는 일반적으로 __init__.py
파일의 초기화 코드를 사용 하여 내부 구조를 깔끔하게 숨기고 사용자에게 균일 한 인터페이스를 제공합니다.
Django 양식 모듈의 예를 살펴 보겠습니다. 양식 모듈의 다양한 함수와 클래스는 분류에 따라 서로 다른 파일에 정의됩니다.
forms/
__init__.py
extras/
...
fields.py
forms.py
widgets.py
...
이제 양식을 작성하려면 각 함수가 정의 된 파일을 알아야하며 연락처 양식을 작성하는 코드는 다음과 같아야합니다 (불편하고 추악합니다).
class CommentForm(forms.forms.Form):
name = forms.fields.CharField()
url = forms.fields.URLField()
comment = forms.fields.CharField(widget=forms.widgets.Textarea)
대신 Django에서는 양식 네임 스페이스에서 직접 다양한 위젯, 양식, 필드 등을 참조 할 수 있습니다.
from django import forms
class CommentForm(forms.Form):
name = forms.CharField()
url = forms.URLField()
comment = forms.CharField(widget=forms.Textarea)
이것이 어떻게 가능한지? 이를 가능하게하기 위해 Django는 forms/__init__.py
모든 위젯, 양식, 필드 등을 forms
네임 스페이스 로 가져 오는 파일에 다음 문을 추가합니다 .
from widgets import *
from fields import *
from forms import *
from models import *
보시다시피, 이제는 각 함수 / 클래스가 정의 된 위치에 대해 걱정할 필요가없고 forms
네임 스페이스 에서 직접이 모든 것을 사용하기 때문에 양식을 만들 때 생활이 단순화됩니다 . 이것은 하나의 예일 뿐이지 만 다른 프레임 워크 및 라이브러리에서 이와 같은 예를 볼 수 있습니다.
이 영역의 모범 사례 중 하나는 라이브러리에서 필요한 모든 클래스를 가져 오는 것 입니다 (예 : mongoengine 참조 ). 따라서 라이브러리 사용자는 다음을 수행 할 수 있습니다.
from coollibrary import OneClass, SecondClass
대신에
from coollibrary.package import OneClass
from coollibrary.anotherpackage import SecondClass
또한 좋은 방법은 __init__.py
버전 상수에 포함됩니다.
편의상 : 다른 사용자는 함수의 정확한 위치를 알 필요가 없습니다.
your_package/ __init__.py file1.py/ file2.py/ ... fileN.py # in __init__.py from file1 import * from file2 import * ... from fileN import * # in file1.py def add(): pass
다른 사람들은 다음과 같이 add ()를 호출 할 수 있습니다.
from your_package import add
file1을 몰라도
from your_package.file1 import add
초기화를 위해 무언가를 넣으십시오. 예를 들어, 로깅 (최상위 수준에 있어야 함) :
import logging.config logging.config.dictConfig(Your_logging_config)
참고 URL : https://stackoverflow.com/questions/5831148/why-would-i-put-python-code-in-init-py-files
'developer tip' 카테고리의 다른 글
Excel에서 UDF를 사용하여 워크 시트 업데이트 (0) | 2020.11.25 |
---|---|
C # SIP 스택 / 라이브러리 (0) | 2020.11.25 |
input [type = 'text'] CSS 선택기가 기본 유형 텍스트 입력에 적용되지 않습니까? (0) | 2020.11.24 |
IntellIJ에서 실행되는 테스트 제외 (0) | 2020.11.24 |
웹 서버를 시작할 수 없습니다. (0) | 2020.11.24 |