首页 > 解决方案 > Python中的未知对象和布尔运算

问题描述

考虑这个Unknown类:

class Unknown:
    def __add__(self, other):
        return self
    def __radd__(self, other):
        return self

unknown = Unknown()
assert (unknown + 1) is unknown
assert (1 + unknown) is unknown

这也适用于__mul__,__rmul__等。

但是,对于布尔运算符,例如:

assert (unknown or True) is True
assert (unknown or False) is unknown

尝试,例如 -

def __or__(self, other):
    return self if not other else other

- 或任何其他组合对我不起作用。

请注意,我也无法定义__bool__(self),因为它的返回值不是,True也不允许False返回NotImplemented

所以我的问题是:是否可以覆盖or, 和and运算符,以便它可能返回Trueor以外的东西False


编辑:感谢@CoryKramer@Martijn Peters下面的评论。

我的印象__or__是逻辑or运算符。它不是。它是按位|的,实际上没有办法覆盖逻辑or运算符。

标签: pythonoperator-overloadinglogical-operators

解决方案


为什么不?你试过了吗?似乎工作得很好...

class Unknown:
    def __add__(self, other):
        return self
    def __radd__(self, other):
        return self
    def __or__(self, other):
        return self

unknown = Unknown()
assert (unknown or unknown) is unknown

推荐阅读