0

複数のメンバーを含むクラスを作成しました。

このクラスの「オブジェクト」を含むハッシュテーブルを作成し、検索できるようにしたいと思います(ハッシュマップを使用してください:))

私が知っているように、私は__eq__演算子 をオーバーロードする必要があります

そこから何に行けばいいの?

Pythonでハッシュテーブルを作成するための参照を見つけることができませんでした...特に「私のクラス」では見つかりませんでした

4

1 に答える 1

5

メソッドだけでなく、.__hash__()メソッドも実装する必要があります.__eq__()

このメソッドは整数を返す必要があり、returns の任意の 2 つのオブジェクトについて、同じ整数値を.__eq__()返す必要があります。True.__hash__()

これを実現する最も簡単な方法は、インスタンスを一意にするすべての属性に対して組み込みhash()関数を使用し、それらの値の XOR の結果を返すことです。

例:

class Foo(object):
    def __init__(self, bar, baz):
        self.bar = bar
        self.baz = baz

    def __eq__(self, other):
        if isinstance(other, type(self)):
            return self.bar == other.bar and self.baz == other.baz
        return False

    def __hash__(self):
        return hash(self.bar) ^ hash(self.baz)

デモ:

>>> foo1 = Foo('ham', 'eggs')
>>> foo2 = Foo('ham', 'eggs')
>>> foo3 = Foo('spam', 'vikings')
>>> foo1 == foo2
True
>>> foo1 == foo3
False
>>> hash(foo1)
1838536788654183919
>>> hash(foo1) == hash(foo2)
True
>>> hash(foo1) == hash(foo3)
False
>>> mapping = {}
>>> mapping[foo1] = 'Monty Python'
>>> foo1 in mapping
True
>>> foo2 in mapping
True
>>> foo3 in mapping
False
>>> mapping[foo2]
'Monty Python'
于 2013-03-20T17:41:56.080 に答える