我有一個類MyClass,它包含兩個成員變量foo和bar。Python中對象的平等
我有這個類的兩個實例,每個實例具有相同的foo和bar值。
但是,當我比較它們的相等性時,Python返回False。
如何確保這些對象相同,而不必在每次比較時手動檢查其屬性的值?例如,我希望能夠使用「in」運算符。
我有一個類MyClass,它包含兩個成員變量foo和bar。Python中對象的平等
我有這個類的兩個實例,每個實例具有相同的foo和bar值。
但是,當我比較它們的相等性時,Python返回False。
如何確保這些對象相同,而不必在每次比較時手動檢查其屬性的值?例如,我希望能夠使用「in」運算符。
你必須告訴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
如果您定義'__eq__',請記住還要定義'__ne__'以防止出現意外。 – 2012-04-27 11:37:42
還記得定義'__ne__':應該明確寫在答案中。忘記它可能非常棘手。 – zezollo 2017-07-27 13:25:13
標準協議是定義__cmp__()
或__eq__()
and __ne__()
。
如果你不這樣做,Python使用對象標識(「地址」)來比較對象。
覆蓋類的__cmp__方法。 – Fenikso 2012-04-27 11:16:59