python - 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
运算符,以便它可能返回True
or以外的东西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