web-dev-qa-db-ja.com

Pythonの「in」演算子をオーバーライドしますか?

Pythonで独自のクラスを作成する場合、「in」演算子の使用を許可するために、どの関数を定義する必要がありますか。

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...
167
astrofrog
215

より完全な答えは次のとおりです。

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__

167
pthulin

また、ドメイン固有の言語を作成するために使用できた中置演算子オーバーライドフレームワークを確認することもできます。

http://code.activestate.com/recipes/384122/

7
user250828