2016-10-01 13 views
1

明らかに、__contains__の特別なメソッドでは、メソッドのオブジェクトがメソッドの右側にある場合に、inエバリュエーションを実装できます。私はinが左手オペランドによって実装されなければならないコードを持っています。それについてどうすればいいですか?オペレータの左側にあるクラスのオーバーライド

+2

右側にはどのような種類があるかもしれませんか?この要件がなぜ発生したのかについてのより詳細な情報は有用であろう。 –

+2

'__rcontains__'はありません。コンテナに含まれるものを決定するのはコンテナだけです。 – user2357112

答えて

1

私はeqをオーバーライドすることでこれを動作させることができました(テキストにアンダースコアをどのように入れますか?)。

"some_listの値"というコードを考えてみましょう。それは値を見つけるまでsome_listを通して反復するでしょう。しかし、それが価値を見出したかどうかは、どのように分かりますか?それを比較することによって。それはあなたが上書きしたいものです。

class Twenty(object): 
    def __init__(self): 
     self.x = 20 

    def __eq__(self, y): 
     print "comparing", self.x, "to", y 
     return self.x == y 

value = Twenty() 
assert value in [10, 20, 30] 
assert value not in [1, 2, 3] 

出力

comparing 20 to 10 
comparing 20 to 20 
comparing 20 to 1 
comparing 20 to 2 
comparing 20 to 3 
+0

欠点は、すべての比較演算子を実装する必要があることです。 http://gerg.ca/blog/post/2012/python-comparison/ –

+0

私はこのアプローチを使用することができませんが、私は答えに感謝します。 – ArekBulski

関連する問題