파이썬의 'in'연산자를 무시 하시겠습니까?


197

파이썬에서 자체 클래스를 만드는 경우 'in'연산자를 사용할 수 있도록 어떤 함수를 정의해야합니까?

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...

실제로 isand is not연산자 를 재정의하는 방법을 찾고있었습니다 . 처럼 query = tinydb.Query().field == value쓸 수 있습니다 Query().field is not None. 그러나 내가 왼쪽있어 보인다 __eq____ne__unpythonic에, 당분간있는 리드를 Query().field != None. (sarc)
Tomasz Gandor 2018 년

답변:



191

더 완전한 대답은 다음과 같습니다.

class MyClass(object):

    def __init__(self):
        self.numbers = [1,2,3,4,54]

    def __contains__(self, key):
        return key in self.numbers

54가 m인지 물어 보면 True가됩니다.

>>> m = MyClass()
>>> 54 in m
True  

과부하에 대한 설명서를__contains__ 참조하십시오 .


@ pthulin, 당신은 코드 측면에서 "더 완벽"할 수도 있지만 Ignacio의 문서 링크는 항상 큰 이점입니다.
피터 한센

16
@베드로. 예, 그러나 우리 중 일부는 대답을 멋지고 시각적으로 표현하는 것을 선호합니다. Ignacio 's는 Google 대신 먼저 여기에 우리를 지시하는 것 이외의 질문에 도움이되지 않았습니다. 감사합니다.
Zoran Pavlovic

Zoran, 나는 동의하며, 나는이 답변을 찬성했고 다른 답변은 찬성하지 않았다. 가능한 한 진정으로 좋은 대답은 항상 문서와 연결되어야한다고 지적합니다.
피터 한센

13
모두 링크가 죽기 때문에 Ignacio의 답변이 너무 흔들리는 이유입니다. 링크 + 예제가 가장 좋기 때문에 우리가 이야기하는 두 가지 대답의 조합이 가장 좋습니다.
demongolem

1
@demongolem 공식적인 파이썬 문서는 인터프리터가 다운로드 할 수 없게 된 후에 또는 후에 죽을 것이다. 그리고 그것은 링크 전용 답변이 아닙니다. 나는이 페이지에 답을 찾고 더 이상의 링크를 클릭하지 않고 그것을 발견했다 (즉, 프로토 타입이 충분했다). 원칙적으로 동의하지만 여기에는 적용되지 않는 임호입니다.
wizzwizz4

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.