[PYTHON] 파이썬 : 패키지의 '전용'모듈
PYTHON파이썬 : 패키지의 '전용'모듈
나는 모듈 mod_a와 mod_b를 가진 패키지 mypack을 가지고있다. 나는 패키지 자체와 mod_a를 자유롭게 임포트하려고한다 :
import mypack
import mypack.mod_a
그러나, 나는 mypack의 독점적 인 사용을 위해 mod_b를 유지하고 싶습니다. 그것은 단지 후자의 내부 코드를 조직하기 위해서 존재하기 때문입니다.
내 첫 번째 질문은 Python 프로그래밍에서 'private'모듈을 이와 같이 사용하는 것이 허용되는 관행인가?
그렇다면 두 번째 질문은 클라이언트에게이 의도를 전달하는 가장 좋은 방법은 무엇입니까? 이름 앞에 밑줄 (예 : _mod_b)을 추가합니까? 아니면 하위 패키지를 비공개로 선언하고 거기에 모든 모듈을 배치하는 것이 좋습니다.
해결법
-
==============================
1.개인 모듈에 밑줄을 붙이면 사용자에게 의도를 전달합니다. 귀하의 경우, 이것은 mypack._mod_b가 될 것입니다.
개인 모듈에 밑줄을 붙이면 사용자에게 의도를 전달합니다. 귀하의 경우, 이것은 mypack._mod_b가 될 것입니다.
이것은 파이썬 모듈에 의해 싸여있을 때 C- 확장 모듈의 이름을 밑줄로 표시하는 PEP8 권장 사항과 같은 정신 (그러나 완전히 유사하지는 않음)입니다. 즉 _ 소켓 및 소켓.
-
==============================
2.내가 해결해 준 해결책은 'private'서브 패키지를 만들고 거기에 숨기고 싶은 모든 모듈을 배치하는 것입니다. 이렇게하면 mypack의 모듈 목록을보다 깨끗하고 쉽게 파싱 할 수 있습니다.
내가 해결해 준 해결책은 'private'서브 패키지를 만들고 거기에 숨기고 싶은 모든 모듈을 배치하는 것입니다. 이렇게하면 mypack의 모듈 목록을보다 깨끗하고 쉽게 파싱 할 수 있습니다.
나에게 이것은보기에 좋지 않다.
-
==============================
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.파이썬은 "개인"또는 "보호 된"메소드 나 클래스를 엄격하게 알고 있거나 지원하지 않습니다. 단일 밑줄로 접두사가 붙은 메소드는 공식 API의 일부가 아니지만 수업이나 파일에는이 작업을 수행하지 않는다는 규칙이 있습니다.
파이썬은 "개인"또는 "보호 된"메소드 나 클래스를 엄격하게 알고 있거나 지원하지 않습니다. 단일 밑줄로 접두사가 붙은 메소드는 공식 API의 일부가 아니지만 수업이나 파일에는이 작업을 수행하지 않는다는 규칙이 있습니다.
누군가 mod_b를 하위 클래스 화하거나 액세스해야한다면, 왜 그렇게하지 못하게해야합니까? 직접 모듈에 액세스하여 mypack을 대신 사용해서는 안되는 문서 및 문서에 원하는 API를 항상 제공 할 수 있습니다.
from https://stackoverflow.com/questions/3602110/python-private-module-in-a-package by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 비트 필드 조작을 수행하는 가장 좋은 방법은 무엇입니까? (0) | 2018.11.12 |
---|---|
[PYTHON] Python에서 JSON으로 직렬화가 10 진수에서 실패합니다 [duplicate] (0) | 2018.11.12 |
[PYTHON] 압축 및 가변 길이 배열 / 파이썬에서 struct 모듈을 사용하여 문자열 (0) | 2018.11.12 |
[PYTHON] Pythonic Circular List (0) | 2018.11.12 |
[PYTHON] django / python의 request.POST에서 목록 항목 검색 (0) | 2018.11.12 |