【发布时间】:2014-06-29 20:01:43
【问题描述】:
我不确定为什么在检查或比较对象的属性时会有差异。对象构造器:
class FooBarObject():
def __init__(self, val_1, val_2):
self.val_1 = val_1
self.val_2 = val_2
对象已创建:
obj = FooBarObject(val_1 = "gnd", val_2 = 10).
我注意到在以下情况下会得到不同的结果:
obj.val_1 is "gnd"
obj.val_1 == "gnd"
>>> False
>>> True
我在这里做错了什么?
【问题讨论】:
-
is测试对象身份,==测试平等。测试之间有不同的世界。如果两个引用指向两个不同的对象,身份测试将失败,但是这两个对象仍然可以测试为 equal。 -
不太确定。如果我只检查或比较属性值,我会得到正确的结果 val_1 = "gnd" val_2 = 10 val_1 is "gnd" val_2 == "gnd" >>>True >>>True
-
解释器可以重用现有的字符串对象作为优化,但你不应该依赖行为。
-
@MartijnPieters 我的回答是指您的第一篇文章。这两个引用指向一个对象和一个对象的属性。只有两个不同的函数用于比较值。
标签: python python-2.7 boolean boolean-logic boolean-expression