문제

파이썬 수준에서 어떻게 구현됩니까?

나는 대부분의 독점 인 척하는 대상을 가지고 있습니다 (회고하여 나는 단지 서브 클래스 독점을 가져야했지만 코드베이스를 리팩터링하지 않으면 나중에 참조하기 위해 이것을 알고 싶을 것입니다), 조금 비슷하게 보입니다

class configThinger(object):
    _config = {}
    def __getitem__(self, key):
        return self._config[key]
    def __setitem__(self, key, value):
        self._config[key] = value

ConfigerInstance [ '뭐든지'] 요소에 액세스하려고 할 때 예상대로 정확하게 작동하고 올바르게 작동합니다.

그러나 전화와 같은 전화

t = configThinger()
t.populate() # Internal method that fills it with some useful data
if 'DEBUG' in t:
    doStuff()

아마도`in in '프로토콜이 getitem() 해당 키를 찾으십시오. 존재하지 않는다는 점에서 다른 예외를 제기해야합니까? 차라리 이런 일을하지 않겠습니다.

try:
    t['DEBUG']
except KeyError:
    pass
else:
    doStuff()

또한 문서에서 어디에 있습니까?

나는 둘러보고 있었다

http://docs.python.org/tutorial/datrastructures.html

http://docs.python.org/library/stdtypes.html

그러나 'in'이라는 단어에 특정한 무언가를 위해 비극적으로 Google을 시도하는 것은 어리석은 일입니다.

편집 1 :

추적 인쇄 스택으로 프로그램이 configerinstance를 호출한다는 것을 알 수 있습니다.getitem(0)

하지만

t = {'rawk': 1,
     'rawr': 2,
    }
t[0] # Raises KeyError
'thing' in t # returns False
도움이 되었습니까?

해결책

운영자에 과부하가 걸리고 싶은 것 같습니까?

메소드를 정의하여 그렇게 할 수 있습니다 __contains__: http://docs.python.org/reference/datamodel.html#object포함

다른 팁

최선의 지원을 위해 in 운영자 (Confentment AKA 멤버십 확인), 구현 __contains__ 귀하의 특별한 방법 configThinger 수업:

class configThinger(object):
    _config = {}
    def __getitem__(self, key):
        return self._config[key]
    def __setitem__(self, key, value):
        self._config[key] = value
    def __contains__(self, key):
        return key in self._config

문서가 있습니다 여기 (또한 다른, 더 적은 수의 지원 방법을 설명합니다. in 운영자).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top