rmo*_*hea 11 python super python-2.7 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__'
Run Code Online (Sandbox Code Playgroud)
这是不直观的,因为object.__eq__存在,但class A(object): pass它没有.如果我没有错误__eq__地进行is检查,那么这可能是解决方法,但使用is而super不是mixin友好.在我的情况下,这条路线是可以的,但在其他情况下可能不是.
任何建议,或关于为什么这样__eq__工作的信息都会很棒.
正如威尔的回答所述,object()实际上根本没有实现__eq__实例(在 python 2.7 中)。
您被存在的事实所欺骗,object.__eq__相信它一定是一种检查对象实例是否相等的方法
相反,object.__eq__实际上是一个继承自 的类方法type,用于检查类型是否相等。
也就是说,处理诸如object == int和 之类的表达式object == object。
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |