파이썬의 '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.