Похоже, что элементы, принадлежащие наборам foo
и bar
, имеют какой-то необычный тип, который переопределяет __repr__
- в противном случае, с обычными типами, будут кавычки, чтобы уточнить, что именно находится внутри этих скобок. Таким образом, этот тип также должен переопределить __eq__
для определения условий равенства (в противном случае по умолчанию два экземпляра равны, только если они один и тот же экземпляр). В качестве альтернативы вы могли бы переопределить __cmp__
, но это довольно старый и запыленный подход - в настоящее время гораздо предпочтительнее конкретные сравнения, такие как __eq__
!
Если вы переопределите __eq__
(или __cmp__
в этом отношении), обязательно переопределите также __hash__
, потому что крайне важно, чтобы два экземпляра, которые сравнивают равные, тоже имели абсолютно одинаковый хэш, в противном случае использование таких экземпляров в качестве членов наборов, или ключей в словарях, плохо себя ведет в очень трудно предсказуемых путях.