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

所以我的问题是:是否可以覆盖orand运算符,以便它可能返回TrueFalse以外的内容


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

我的印象是__or__用于逻辑or运算符。事实并非如此。它是针对逐位|的,实际上没有办法覆盖逻辑or运算符。

为什么不呢?你试过了吗?看起来还不错。。。

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

相关内容

  • 没有找到相关文章

最新更新