Требуется, чтобы, если p1
из c1
было 'x', а p1
из c2
было 'x или y', то c1 == c2
вернет True
.
Это очень схематичный (то есть, вероятно, плохой) дизайн.Равенство должно быть транзитивным, так что если c1 == c2
и c2 == c3
, то c1 == c3
.Теперь ваша спецификация требует, чтобы C('x') == C('x or y')
и C('x or y') == C('y')
, что должно подразумевать, что C('x') == C('y')
- но вы, вероятно, не хотите, чтобы это было правдой.(И я вижу, что вы поняли это, когда я писал это.)
Я хотел бы предложить, чтобы вы оставили __eq__
в покое и использовали совершенно другой метод для выполнения этих «нечетких» сравнений, возможно, что-токак is_compatible_with
.Или, если вы собираетесь переопределить __eq__
, по крайней мере, сделайте что-то разумное, что подчиняется переходному свойству, например, просто сравнивая строковые аргументы.Это может означать, что __eq__
не очень полезен для вашего конкретного приложения, но это нормально;вот почему вы можете создавать другие методы.