복붙노트

[PYTHON] 파이썬 : 패키지의 '전용'모듈

PYTHON

파이썬 : 패키지의 '전용'모듈

나는 모듈 mod_a와 mod_b를 가진 패키지 mypack을 가지고있다. 나는 패키지 자체와 mod_a를 자유롭게 임포트하려고한다 :

import mypack
import mypack.mod_a

그러나, 나는 mypack의 독점적 인 사용을 위해 mod_b를 유지하고 싶습니다. 그것은 단지 후자의 내부 코드를 조직하기 위해서 존재하기 때문입니다.

내 첫 번째 질문은 Python 프로그래밍에서 'private'모듈을 이와 같이 사용하는 것이 허용되는 관행인가?

그렇다면 두 번째 질문은 클라이언트에게이 의도를 전달하는 가장 좋은 방법은 무엇입니까? 이름 앞에 밑줄 (예 : _mod_b)을 추가합니까? 아니면 하위 패키지를 비공개로 선언하고 거기에 모든 모듈을 배치하는 것이 좋습니다.

해결법

  1. ==============================

    1.개인 모듈에 밑줄을 붙이면 사용자에게 의도를 전달합니다. 귀하의 경우, 이것은 mypack._mod_b가 될 것입니다.

    개인 모듈에 밑줄을 붙이면 사용자에게 의도를 전달합니다. 귀하의 경우, 이것은 mypack._mod_b가 될 것입니다.

    이것은 파이썬 모듈에 의해 싸여있을 때 C- 확장 모듈의 이름을 밑줄로 표시하는 PEP8 권장 사항과 같은 정신 (그러나 완전히 유사하지는 않음)입니다. 즉 _ 소켓 및 소켓.

  2. ==============================

    2.내가 해결해 준 해결책은 'private'서브 패키지를 만들고 거기에 숨기고 싶은 모든 모듈을 배치하는 것입니다. 이렇게하면 mypack의 모듈 목록을보다 깨끗하고 쉽게 파싱 할 수 있습니다.

    내가 해결해 준 해결책은 'private'서브 패키지를 만들고 거기에 숨기고 싶은 모든 모듈을 배치하는 것입니다. 이렇게하면 mypack의 모듈 목록을보다 깨끗하고 쉽게 파싱 할 수 있습니다.

    나에게 이것은보기에 좋지 않다.

  3. ==============================

    3.명시 적 비공개 키워드는 없지만 비공개 기능을 하나의 밑줄로 시작하는 규칙이 있지만 두 번째 밑줄은 다른 사람들이 모듈 외부에서 쉽게 함수를 호출 할 수 없도록합니다. PEP 8에서 다음을 참조하십시오.

    명시 적 비공개 키워드는 없지만 비공개 기능을 하나의 밑줄로 시작하는 규칙이 있지만 두 번째 밑줄은 다른 사람들이 모듈 외부에서 쉽게 함수를 호출 할 수 없도록합니다. PEP 8에서 다음을 참조하십시오.

    - _single_leading_underscore: weak "internal use" indicator.  E.g. "from M
      import *" does not import objects whose name starts with an underscore.
    
    - single_trailing_underscore_: used by convention to avoid conflicts with
      Python keyword, e.g.
    
      Tkinter.Toplevel(master, class_='ClassName')
    
    - __double_leading_underscore: when naming a class attribute, invokes name
      mangling (inside class FooBar, __boo becomes _FooBar__boo; see below).
    
    - __double_leading_and_trailing_underscore__: "magic" objects or
      attributes that live in user-controlled namespaces.  E.g. __init__,
      __import__ or __file__.  Never invent such names; only use them
      as documented.
    

    전체 모듈을 비공개로 만들려면 __init__.py 파일을 포함하지 마십시오.

  4. ==============================

    4.파이썬은 "개인"또는 "보호 된"메소드 나 클래스를 엄격하게 알고 있거나 지원하지 않습니다. 단일 밑줄로 접두사가 붙은 메소드는 공식 API의 일부가 아니지만 수업이나 파일에는이 작업을 수행하지 않는다는 규칙이 있습니다.

    파이썬은 "개인"또는 "보호 된"메소드 나 클래스를 엄격하게 알고 있거나 지원하지 않습니다. 단일 밑줄로 접두사가 붙은 메소드는 공식 API의 일부가 아니지만 수업이나 파일에는이 작업을 수행하지 않는다는 규칙이 있습니다.

    누군가 mod_b를 하위 클래스 화하거나 액세스해야한다면, 왜 그렇게하지 못하게해야합니까? 직접 모듈에 액세스하여 mypack을 대신 사용해서는 안되는 문서 및 문서에 원하는 API를 항상 제공 할 수 있습니다.

  5. from https://stackoverflow.com/questions/3602110/python-private-module-in-a-package by cc-by-sa and MIT license