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

Guido van Rossum guido@python.org
Fri, 04 Oct 2002 08:39:21 -0400


> This reminds me of an asymmetry between the bool type and other
> built-in types: the lack of a __bool__ method.
> 
> Perhaps a __bool__ method should be added to objects, just like
> __int__, __str__, __long__, __float__, __complex__ and __unicode__.
> 
> If __bool__ is not defined bool() would fall back to using
> __nonzero__ and __len__, just like str() falls back to using
> __repr__ when __str__ is not defined.

Apart from being a slightly odd name, __nonzero__ does this; I see no
reason to rename it to __bool__, since that would add nothing new --
it would only be cosmetics.

> Would this be done in CPython with a new tp_bool slot or
> special-cased like __unicode__ and __complex__?  Binary
> compatibility aside, I think it should be a slot.  Boolean
> evaluation is a pretty basic operation.

I think it's actually a bad idea to allow types to define their
booleanness independent from their numeric value (for numbers) or
length (for containers).

--Guido van Rossum (home page: http://www.python.org/~guido/)