Python __eq__ 中是否需要传递性?
python 504
原文标题 :Is there a need for transitivity in Python __eq__?
我正在使用自定义__eq__
实现我自己的课程。而且我想返回True
对于数学意义上不“相等”但以模糊方式“匹配”的事物。
然而,一个问题是,这会导致数学意义上的传递性丧失,即a == b && b ==c
,而a
可能不等于c
。
问题:Python 是否依赖于__eq__
是可传递的?我正在尝试做的事情是否会破坏事物,或者只要我自己小心不要假设传递性,是否有可能做到这一点?
用例
我想将电话号码相互匹配,而这些电话号码可能是国际格式,或者仅供国内使用(未指定国家代码)。如果没有指定国家代码,我希望一个数字等于一个数字,但如果指定,它应该只等于具有相同国家代码的数字,或者没有一个。
所以:
- 当然, +31 6 12345678 应该等于 +31 6 1234567 ,并且 06 12345678 应该等于 06 12345678
- +31 6 12345678 应该等于 06 12345678(和 v.v.)
- +49 6 12345678 应该等于 06 12345678(和 v.v.)
- 但是 +31 6 12345678 不应该等于 +49 6 12345678
编辑:我不需要散列(因此不会实现它),这样至少让生活更轻松。