是否保证比较不等于任何其他对象的对象实例(但不是子类)?

时间:2018-02-07 12:14:15

标签: python

道歉,如果这是一个骗局。 (我找不到它,但我对谷歌不是很好。)

我只是偶然发现了一些使用

的代码
x = object()

在他们可能希望x比较不等于已经存在的任何地方的地方。这是语言保证的吗?

2 个答案:

答案 0 :(得分:5)

如果您使用x == other_object进行比较,则此可能会返回True。由于自定义类可以覆盖__eq__函数,并使其等于每个其他对象。

但是我们可以使用is来检查两个操作数是否引用相同的对象。所以我们可以像使用它一样:

dummy = object()
lookup = somedict.get(somekey, dummy):
if lookup is dummy:
    # we did *not* find the key in the dictionary
    pass
else:
    pass

由于我们刚刚创建了dummy对象,因此somedict中的对象无法进入(除非它当然类似于locals()),因此我们我们确定如果我们在字典中找到密钥,那么将返回dummy。因此,我们可以安全地使用is来确定。

答案 1 :(得分:3)

无保证。您可以通过实施__eq__来制作任何其他内容。

除非你知道x是什么,否则没有任何保证,也没有什么可以假设的。

例如:

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

print(A() == object())
# True

恰恰相反:

class A:
    def __eq__(self, other):
        return False

print(A() == object())
# False