Is it possible to overload logical and in Python?

2019-05-15 19:22发布

问题:

I was under the impression it was possible to overload and in Python, but reading through the docs just now, I realized that __and__ refers to the bitwise & operator, not logical and.

Am I overlooking something, or is it not possible to overload logical and in Python?

回答1:

No this is not possible. There is a proposal that adds this functionality but for now, it is rejected.



回答2:

No, it is not possible. See here.



回答3:

There is no straight way to do this. You could override __nonzero__ for your objects to modify their truth value.

class Truth:

    def __init__(self, truth):
        self.truth = truth

    def __nonzero__(self):
        return self.truth

t = Truth(True)
f = Truth(False)

print bool(t and t)
print bool(t and f)
print bool(f and f)