2012-03-25 3 views
2

, 그들은이 컬렉션 객체가 속한 데이터베이스 개체를 표현하기 위해 self._Collection__database을 사용하려면 :플라스크 - PyMongo : 어떻게 "self._Collection__database"가 나오나요? 플라스크-PyMongo에서

class Collection(collection.Collection): 
    """Custom sub-class of :class:`pymongo.collection.Collection` which 
    adds Flask-specific helper methods. 
    """ 

    def __getattr__(self, name): 
    attr = super(Collection, self).__getattr__(name) 
    if isinstance(attr, collection.Collection): 
     db = self._Collection__database 
     return Collection(db, attr.name) 
    return attr 

self._Collection__database하지 self.__database입니까?

test <a>and <i> 

답변

2

플라스크 - PyMongo는 임의로 그 이름을 선택하지 않습니다.
이름은 name mangling의 결과이다 (즉, 서브 클래스에 의해 정의 된 이름과 이름 피 네임 충돌에) 급 전용 멤버에 대한 유효한 사용 사례가 있으므로

제한된 지원하지 이고 이름 맹 글링 (name mangling)이라고 불리는 그런 메커니즘을 위해. 형식의 식별자 __spam (최소 두 개의 밑줄, , 뒤에 하나의 밑줄)은 텍스트로 대체하여 _classname__spam으로 바뀝니다. 여기서 classname은 맨 밑줄이 제거 된 현재 클래스 이름입니다.

the parent-class definition에서, 속성은 self.__database로 정의하고 서브 클래스가 자신의 self.__database 속성을 자신의 임무로 덮어 쓰지 않도록 파이썬 (self._ClassName__attributename에) 이름을 "미치게".