繁体   English   中英

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

[英]'super' object has no attribute '__eq__'

当我尝试覆盖魔术方法__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表达式。

这是因为object()实际上并没有实现__eq__() 这里的“默认”是:

class A(object):
    def __eq__(self, other):
        if self is other:
            return True

        return self == other

但是,如果您尝试的工作有效,您实际上将检查父类的self实例是否等于other实例。 并且,它是相同的对象( self ),所以它会。 所以最接近你的代码实际上是:

class A(object):
    def __eq__(self, other):
        if self is other:
            return True

        return super(A, self) == other

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM