사이에 혼란이있을 수 있습니다 클래스 음부 와 모듈 음부는 .
모듈 비공개 로 시작 밑줄 하나의
이러한 요소는 사용시 따라 복사되지 from <module_name> import *
IMPORT 명령의 형태; 그러나 import <moudule_name>
구문을 사용하면 가져옵니다 ( Ben Wilhelm의 답변 참조 )
질문 예제의 a .__ num에서 밑줄 하나를 제거하면 from a import *
구문을 사용하여 a.py를 가져 오는 모듈에 표시되지 않습니다 .
클래스 개인 과 시작 두 개의 밑줄 (일명 던더 즉, D-ouble에서 점수)
이러한 변수는 클래스 명 등을 포함하는 "엉망"그 이름이
그것은 여전히 엉망이 이름을 통해 클래스 로직의 외부에서 액세스 할 수 있습니다.
이름 맹 글링은 무단 액세스에 대한 가벼운 예방 장치 역할을 할 수 있지만, 주요 목적은 조상 클래스의 클래스 구성원과 이름 충돌을 방지하는 것입니다. Alex Martelli의 재미 있고 정확한 성인 참고 자료를 참조 하십시오. 이러한 변수와 관련하여 사용 된 규칙을 설명합니다.
>>> class Foo(object):
... __bar = 99
... def PrintBar(self):
... print(self.__bar)
...
>>> myFoo = Foo()
>>> myFoo.__bar #direct attempt no go
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__bar'
>>> myFoo.PrintBar() # the class itself of course can access it
99
>>> dir(Foo) # yet can see it
['PrintBar', '_Foo__bar', '__class__', '__delattr__', '__dict__', '__doc__', '__
format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__
', '__subclasshook__', '__weakref__']
>>> myFoo._Foo__bar #and get to it by its mangled name ! (but I shouldn't!!!)
99
>>>
>>> import fileinfo >>> m = fileinfo.MP3FileInfo() >>> m.__parse("/music/_singles/kairo.mp3") 1 Traceback (innermost last): File "<interactive input>", line 1, in ? AttributeError: 'MP3FileInfo' instance has no attribute '__parse'
fileinfo.MP3FileInfo ()가 클래스의 인스턴스입니다. 이중 밑줄을 사용할 때이 예외가 발생합니다. 귀하의 경우 클래스를 만들지 않고 방금 모듈을 만들었습니다. 또한보십시오 : stackoverflow.com/questions/70528/…