考虑这个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
以外的其他内容?< / strong>
编辑:感谢下面的@CoryKramer和@Martijn Peters评论。
我的印象是__or__
用于逻辑or
运算符。它不是。它是针对按位|
的,实际上,没有任何方法可以覆盖逻辑or
运算符。
答案 0 :(得分:-1)
为什么不呢?你试过了吗?似乎工作正常……
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