道歉,如果这是一个骗局。 (我找不到它,但我对谷歌不是很好。)
我只是偶然发现了一些使用
的代码x = object()
在他们可能希望x
比较不等于已经存在的任何地方的地方。这是语言保证的吗?
答案 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