python - 'super' 对象没有属性 '__eq__'

标签 python python-2.7 super python-object

当我尝试重写魔术方法 __eq__,并使用 super 访问 object 中的基本方法时,出现错误.这不可能是一个错误,但感觉确实像一个错误:

class A(object):
    def __eq__(self, other):
        return super(A, self).__eq__(other)
A() == 0

# raises AttributeError: 'super' object has no attribute '__eq__'

这是不直观的,因为 object.__eq__ 存在,但对于 class A(object): pass 它不存在。如果我没记错的话,__eq__ 求助于 is 检查,所以这可能是这里的解决方法,但使用 is 而不是 super 不是混合友好的。走那条路对我来说没问题,但对其他人来说可能就不行了。

关于为什么 __eq__ 以这种方式工作的任何建议或信息都会很棒。

最佳答案

如 Will 的回答所述,object() 实际上根本没有实现 __eq__ 实例(在 python 2.7 中)。

您被 object.__eq__ 的存在所欺骗,相信它一定是一种检查对象的实例 是否相等的方法

相反,object.__eq__ 实际上是一个类方法,继承自 type,用于检查类型是否相等。

即处理object == intobject == object 等表达式。

关于python - 'super' 对象没有属性 '__eq__',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37381318/

相关文章:

python - urllib2 geturl() 不适用于某些 url 重定向

Java - 理解克隆

python - SelectKBest (chi2) 如何计算分数?

Python或bash : Merging two csv files based on several matching field values,格式化,输出CSV

python - 无法在 Python 2.7.9 虚拟环境中导入 _winreg

Python、NetCDF4 和 HDF5

python - 继承自 Tkinter.Canvas - 调用 super 会导致错误

java - 显示另一个类的信息

Python 猴子修补对象未按预期工作

python - py 调用返回的尺寸大于分辨率