在 Python 中重载按位运算符以处理布尔值

PPr*_*eus 6 python python-2.7

我有一个类,我希望在某些情况下能够对其进行按位运算。

class Measurement(object):
    def __init__(self, value = None, category = None, measure = None):
        self.value = value
        self.category = category
        self.measure = measure    

    def __nonzero__(self):
        return self.value.__nonzero__()

    def __or__(self, other):
        return self.__nonzero__() | other

a = False
b = Measurement(True)
Run Code Online (Sandbox Code Playgroud)

此时c = b | a可以工作,但c = a | b会出现类型错误。我怎样才能让它双向工作?

另外,有没有更优雅的方法来做到这一点;例如,我曾希望通过定义__nonzero__,我可能会得到正确的行为,但事实并非如此。

我正在使用Python 2.7。

PPr*_*eus 2

通过定义__ror__,如下所示,我得到了正确的行为。然而,问题的第二部分仍然存在。有更优雅的方式吗?

def __ror__(self, other):
    return self.__or__(other)
Run Code Online (Sandbox Code Playgroud)

  • `__ror__`...我知道。 (3认同)
  • 不,没有更好的办法了。你可以定义 `self.__ror__ = self.__or__`,但我认为这会更令人困惑 (2认同)