6

MyClass私は2つのメンバー変数fooとを含むクラスを持っていますbar:

class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

このクラスには 2 つのインスタンスがあり、それぞれが と に対して同じ値を持っていfooますbar

x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')

ただし、それらを等しいかどうか比較すると、Python は次のように返しますFalse

>>> x == y
False

これら2つのオブジェクトが等しいとPythonに見なさせるにはどうすればよいですか?

4

2 に答える 2

8

平等をどの程度正確に定義するかをPythonに指示する必要があります。__eq__これを行うには、次のような特別なメソッドを定義します。

def __eq__(self, other):
    return self.attrfoo == other.attrfoo # change that to your needs

これは、クラスのインスタンスを比較するための「古い」スタイルであり、特別なメソッドが見つから__cmp__(self, other)ない場合にのみ使用されます。rich comparisonここでそれらを読んでください:http://docs.python.org/release/2.7/reference/datamodel.html#specialnames

于 2012-04-27T11:16:09.217 に答える
5

標準プロトコルは、またはとを定義すること__cmp__()です。__eq__()__ne__()

そうでない場合、PythonはオブジェクトID(「アドレス」)を使用してオブジェクトを比較します。

于 2012-04-27T11:16:01.287 に答える