Python不认为等效对象是等价的

 元顿20130208 发布于 2023-02-12 18:48

我正在腌制,压缩和保存python对象.我希望能够仔细检查我保存的对象是否是在解压缩和去除后返回的完全相同的对象.我认为我的代码中有一个错误,但当我将问题归结为一个可重现的例子时,我发现python并不认为在两个不同的时间点创建的两个看似相同的对象是相等的.这是一个可重复的例子:

class fubar(object):
    pass

print(fubar() == fubar())
#False

为什么python认为这两个对象不相等?检查两个对象确实相同的最pythonic方法是什么?

1 个回答
  • Python中的默认相等比较是检查身份(即两个对象是同一个对象).

    根据Python Library Reference:

    除非类定义__eq __()方法或__cmp __()方法,否则类的非相同实例通常会比较为不相等.

    要创建自己的等价定义,需要定义__eq__方法.这是一种方法:

    class fubar(object):
    
        def __eq__(self, other):
            'Fubar objects are considered equal if they have the same contents'
            if type(self) != type(other):
                return NotImplemented
            return vars(self) == vars(other)
    

    NotImplemented的返回值表示fubar不知道如何进行比较,并且给另一个对象提供了进行比较的机会.

    在Python语言参考具有这样说NotImplemented:

    此类型具有单个值.有一个具有此值的对象.可以通过内置名称NotImplemented访问此对象.如果数值方法和丰富的比较方法未实现所提供操作数的操作,则它们可能会返回此值.(然后,解释器将尝试反射操作或其他一些后备操作,具体取决于操作员.)其真值是真的.

    2023-02-12 18:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有