36
votes

I tried overriding __and__, but that is for the & operator, not and - the one that I want. Can I override and?

4

4 Answers

33
votes

You cannot override the and, or, and not boolean operators.

42
votes

No you can't override and and or. With the behavior that these have in Python (i.e. short-circuiting) they are more like control flow tools than operators and overriding them would be more like overriding if than + or -.

You can influence the truth value of your objects (i.e. whether they evaluate as true or false) by overriding __nonzero__ (or __bool__ in Python 3).

3
votes

Not really. There's no special method name for the short-circuit logic operators.

0
votes

Although you can't overload __and__ you can use infix to overload and. You would use &and& to represent the and operator in this case.