1

このようなクラスがあった場合:

class foo(object):
    def __init__(self, x, y, z):
         self.x = x
         self.y = y
         self.z = z

このようなリストで:

list = [foo(1, 2, 3), foo(4, 5, 6), foo(7, 8, 9)]

次のような x 値と z 値のみをチェックするように、「in」のカスタム テストを作成するにはどうすればよいでしょうか。

new_foo = foo(1,8,3)
if new_foo in list:
    print True
else:
    print False

Trueを出力します

4

1 に答える 1

6

リスト上での使用は等価性を使用したテストであるため、メソッドinを定義する必要があります:ドキュメントを参照してください。また、オブジェクトが変更可能な状態である場合に、オブジェクトが一貫した方法で同等に比較されるようにするメソッドを定義する必要があります。例えば:__eq____hash__

class foo(object):
    def __init__(self, x,y,z):
         self.x = x
         self.y = y
         self.z = z

    def __eq__(self, other):
        return (self.x, self.z) == (other.x, other.z)

    def __hash__(self):
        return hash((self.x, self.z))

ただし、本当にこれを行うかどうかについては、慎重に検討する必要があります。これは、平等がテストされるすべての状況に適用される平等の概念を定義します。したがって、投稿で求めていることを実行すると、foo(1,2,3) == foo(1,8,3)を使用する場合だけでなく、一般的に当てはまりますin

于 2012-07-20T06:30:46.767 に答える