클래스 내에서 __Singleton
식별자는 mangled이됩니다. 이름 맹 글링은 클래스 내부에서만 발생하기 때문에 (외부가 아닌) 문제가 발생합니다. 따라서 __Singleton
을 클래스 이름으로 사용하면 클래스 스위트에 속할 때 __Singleton
과 다른 것을 의미합니다.
형태 __spam
의 상관 식별자 (적어도 두 개의 주요한 밑줄, 최대 하나의 후단에 밑줄)를 텍스트 클래스 이름이 박탈 밑줄 (들)과 현재의 클래스 이름 _classname__spam
로 대체된다. 이 mangling은 클래스의 정의 내에서 발생하는 한 식별자의 통어 위치에 상관없이 수행됩니다. 그것은
이 ... 서브 클래스는 개체 간 메서드 호출을 파괴하지 않고 메소드를 오버라이드 (override)시키는 데 도움이 있기 때문에 맹 글링의 주요 원인이라고
참고. 또한
:
이 ... 서브 클래스 등으로
에 의해 정의 된 이름을 가진 이름의 이름 충돌을 피하기 위해 정말 선두와 클래스가 어떤 이유가없는 double은 이름에서 밑줄을 긋습니다 (클래스 이름과 충돌하는 intraclass 메소드 호출의 가능성은 없습니다). 단일 밑줄은 그 클래스 사용하지 않도록 사용자에게 충분한 신호 :
... 밑줄로 시작 이름 (예 : _spam
을)의 비 공공 부분으로 취급되어야한다 API (함수, 메소드 또는 데이터 멤버이든지간에). 구현 세부 사항으로 간주되어야하며 사전 통지없이 변경 될 수 있습니다.
내가 조언하지,하지만 당신이 정말로가 작업 할 경우, 당신은 아마 클래스 조회 globals
를 사용할 수 있습니다
class __Foo(object):
def __init__(self):
super(globals()['__Foo'], self).__init__()
f = __Foo()
print f
'__Singleton'이 (가) 무엇이 아닌 곳에서 사용되는 것을 막고 싶습니까? –
내 모듈 외부. MySingleton만이 이것을 사용하고자하는 사람들이 접근 할 수 있어야합니다. –
선행 이중 밑줄은 범용 개인 정보 표시가 아닙니다. 그들은 하나의 밑줄보다 사적인 것을 만들지 않습니다. – user2357112