2012-04-27 46 views
3

我有一個類MyClass,它包含兩個成員變量foo和bar。Python中對象的平等

我有這個類的兩個實例,每個實例具有相同的foo和bar值。

但是,當我比較它們的相等性時,Python返回False。

如何確保這些對象相同,而不必在每次比較時手動檢查其屬性的值?例如,我希望能夠使用「in」運算符。

+0

覆蓋類的__cmp__方法。 – Fenikso 2012-04-27 11:16:59

回答

6

你必須告訴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

+6

如果您定義'__eq__',請記住還要定義'__ne__'以防止出現意外。 – 2012-04-27 11:37:42

+0

還記得定義'__ne__':應該明確寫在答案中。忘記它可能非常棘手。 – zezollo 2017-07-27 13:25:13