[Python-Dev] the not operator (and the __not__ special method)

Brian Quinlan brian@sweetapp.com
Thu, 03 Oct 2002 14:50:54 -0700


> shows that python doesn't call the __not__ special method
> in a 'not' operator statement.

Python calls the special __nonzero__ method so check the truth value of
an object.

> Another question, I notice than  "a or b" and "a and b" are
> not equivalent to "a | b" and "a & b", since the last ones call
> the methods __or__ and __and__ if they are defined, but
> the "literal forms" never call them.  Is this intentional?, if
> that is the case, I guess a big and clear note is needed
> in the documentation.

"and" and "or" are logical operators, while "|" and "&" are bitwise
operators. 

>>> 13 & 14
12
>>> 13 and 14
14

> And just for symmetry considerations, given that python has the
> pairs (and, &) and (or, |), does anybody considering to introduce
> the ! operator, so you can have the equivalent (not, !) too?

There is a bitwise not operator: ~

>>> ~2
-3

Cheers,
Brian