문제
파이썬 수준에서 어떻게 구현됩니까?
나는 대부분의 독점 인 척하는 대상을 가지고 있습니다 (회고하여 나는 단지 서브 클래스 독점을 가져야했지만 코드베이스를 리팩터링하지 않으면 나중에 참조하기 위해 이것을 알고 싶을 것입니다), 조금 비슷하게 보입니다
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
운영자).