理解python和递归中的cmp

我正在使用一些现有的代码来重新定义类的相等性(通过__cmp__方法).它没有按预期工作,并试图修复它我遇到了一些我不明白的行为.如果你在一个只调用内置函数cmp的类上定义__cmp__,那么我希望它总能达到最大递归深度.但是,如果您尝试将类的实例与自身进行比较,则返回0.

这是代码:

class A:
    def __cmp__(self, other):
        return cmp(self, other)

a = A()
b = A()
cmp(a, a) # returns 0
cmp(b, b) # returns 0
cmp(a, b) # results in RuntimeError: maximum recursion depth exceeded

我理解RuntimeError,但我不明白为什么前两次调用cmp成功.

我已经阅读了python文档的data model部分以及其他类似于python equality这个很好的细分但却无法找到这个递归的答案.

并且,是的,我理解,写作这是一个完全没有意义的课程.我正在使用的代码试图在某些情况下重新定义相等性,否则会陷入基础. basecase不能实现,所以我试图解决它.我认为调用cmp可能会起作用,并发现了这个问题.我希望理解这一点有助于我找到合适的解决方案.

最佳答案 如果两个名称引用相同的对象,则它们在定义上是相同的(编辑:至少就cmp而言,其中“相等”实际上意味着“既不大于也不小于”).

点赞