比较时评估为True的Python对象

时间:2015-03-25 00:02:17

标签: python boolean boolean-expression

我需要一个Python对象,在与它进行比较时总是评估为True。例如,如果此对象被称为TRUE,那么:

TRUE == 10
TRUE == False
TRUE == True
TRUE == "hello"
TRUE == list()

是否有内置的Python对象?

注意我要求内置对象。如果我要检查x == y数百次,y更改,x是否已设置和取消设置,那么对于未设置的实例,我希望{ {1}}评估为x == y。 (当设置True时,我想要执行实际的比较操作)

我认为python可能有一个优化的内置对象。

3 个答案:

答案 0 :(得分:1)

我需要一个python对象,在与它进行比较时总是计算为。

不,你没有。证明:假设存在这样的值TRUE。然后,对于所有x,表达式TRUE == x等同于True。因此,整个表达式可以替换为True

重载__eq__使其简单地返回True

是不好的做法

如果你想要一个对某个对象总是求值为True的表达式,那么这可能是一个更好的方法:

class AlwaysTrue():
    pass

l = [1,2,3,4,5,AlwaysTrue(),7,8,AlwaysTrue()]

search_value = 6
for x in l:
    if x == search_value or isinstance(x, AlwaysTrue):
        print('Value found!')
        break

请注意,6不在列表中,但仍会打印“找到值!”

答案 1 :(得分:1)

class TRUE(object):
    def __eq__(self, other):
        return True
# no reason to have more that one instance (I think?)
TRUE = TRUE()

print(TRUE == 10)
print(TRUE == False)
print(TRUE == True)
print(TRUE == "hello")
print(TRUE == list())

附录: 正如其他人所指出的那样,TRUE似乎没有明显的用途。我真的不能想到一个。虽然我可以想象一个类似物体的用途:

class MIN(object):
    def __lt__(self, other): return True
    def __le__(self, other): return True
    def __gt__(self, other): return False
    def __ge__(self, other): return False
    def __eq__(self, other): return False
MIN = MIN()

如果我尝试测试最小堆,MIN将始终位于顶部。对于最大堆,它总是在底部。这与队列中元素的类型无关。

答案 2 :(得分:0)

你需要重载运算符,但真的有什么意义呢?

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