2012-04-27 5 views
3

У меня есть класс MyClass, который содержит две переменные-члены foo и bar.Равенство объектов в Python

У меня есть два экземпляра этого класса, каждый из которых имеет одинаковые значения для foo и bar.

Однако, когда я сравниваю их для равенства, Python возвращает False.

Как я могу гарантировать, что эти объекты равны, без необходимости вручную проверять значения их атрибутов каждый раз, когда они сравниваются? Например, я хотел бы иметь возможность использовать оператор «in».

+0

Переопределить метод '__cmp__' класса. – Fenikso

ответ

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__' для предотвращения сюрпризов. –

+0

Не забудьте также определить '__ne__': должно быть написано явно в ответе. Забыть это может быть очень сложно. – zezollo

5

Стандартным протоколом является определение __cmp__() или __eq__() and __ne__().

Если вы этого не сделаете, Python использует идентификатор объекта («адрес») для сравнения объектов.

Смежные вопросы