gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:11:22 24 4
gpt4 key购买 nike

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

class fubar(object):
pass

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

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

最佳答案

Python 中默认的相等比较是检查同一性(即两个对象是同一个对象)。

根据Python Library Reference :

Non-identical instances of a class normally compare as non-equal unless the class defines the __eq__() method or the __cmp__() method.

要创建您自己的等价定义,您需要定义一个__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 不知道如何进行比较,并给 other 对象一个机会做比较。

Python Language Reference关于 NotImplemented 有这样的说法:

This type has a single value. There is a single object with this value. This object is accessed through the built-in name NotImplemented. Numeric methods and rich comparison methods may return this value if they do not implement the operation for the operands provided. (The interpreter will then try the reflected operation, or some other fallback, depending on the operator.) Its truth value is true.

关于Python 不认为等价对象是等价的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com