考虑这个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
运算符,以便它可能返回True
或False
以外的内容
编辑:感谢@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