developer tip

__init__.py 파일에 파이썬 코드를 넣는 이유

copycodes 2020. 11. 25. 08:04
반응형

__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버전 상수에 포함됩니다.


  1. 편의상 : 다른 사용자는 함수의 정확한 위치를 알 필요가 없습니다.

    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
    
  2. 초기화를 위해 무언가를 넣으십시오. 예를 들어, 로깅 (최상위 수준에 있어야 함) :

    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

반응형