[Python-Dev] For review: PEP 285: Adding a bool type

M.-A. Lemburg mal@lemburg.com
Fri, 08 Mar 2002 17:31:28 +0100


Guido van Rossum wrote:
> 
> I'll let this short and sweet PEP speak for itself.
> 
> http://python.sourceforge.net/peps/pep-0285.html
> 
> PEP: 285
> Title: Adding a bool type
> Version: $Revision: 1.1 $
> Last-Modified: $Date: 2002/03/08 15:38:37 $
> Author: guido@python.org (Guido van Rossum)
> Status: Draft
> Type: Standards Track
> Created: 8-Mar-2002
> Python-Version: 2.3
> Post-History: 8-Mar-2002 (python-dev)
> 
> Abstract
> 
>     This PEP proposes the introduction of a new built-in type, bool,
>     with two constants, False and True.  The bool type would be a
>     straightforward subtype (in C) of the int type, and the values
>     False and True would behave like 0 and 1 in most respects (e.g.
>     False==0 and True==1 would be true) except repr() and str().  All
>     built-in operations that conceptually return a Boolean result will
>     be changed to return False or True instead of 0 or 1; for example,
>     comparisons and the "not" operator.
> 
> Rationale
> 
>     Most languages eventually grow a Boolean type; even C99 has one.
>     It's useful to be able to tell from a function result that the
>     outcome has Boolean semantics.

+1.
 
> Specification
> 
>     The following Python code specifies most of the properties of the
>     new type:
> 
>         class bool(int):
> 
>             def __new__(cls, val=0, _create=0):
>                 if _create:
>                     # This is nor part of the spec,
>                     # just a hack to bootstrap False and True
>                     return int.__new__(cls, not not val)
>                 elif val:
>                     return True
>                 else:
>                     return False
>
>             def __repr__(self):
>                 if self:
>                     return "True"
>                 else:
>                     return "False"
> 
>             __str__ = __repr__

I don't like this: it will break too much code since there
are already two singletons Py_True and Py_False available
in Python and these return 1 / 0 resp.
 
>             def __and__(self, other):
>                 if isinstance(other, bool):
>                     return bool(int(self) & int(other))
>                 else:
>                     return NotImplemented
> 
>             __rand__ = __and__
> 
>             def __or__(self, other):
>                 if isinstance(other, bool):
>                     return bool(int(self) | int(other))
>                 else:
>                     return NotImplemented
> 
>             __ror__ = __or__
> 
>             def __xor__(self, other):
>                 if isinstance(other, bool):
>                     return bool(int(self) ^ int(other))
>                 else:
>                     return NotImplemented
> 
>             __rxor__ = __xor__
> 
>         False = bool(0, _create=1)
>         True = bool(1, _create=1)

Please adjust Py_True and Py_False (at C level) to be 
identical to these constants.
 
> Issues
> 
>     Because the repr() or str() of a bool value is different from an
>     int value, some code (e.g. doctest-based unit tests) may fail.
>     How much of a backwards compatibility problem this will be, I
>     don't know.  If we find this is a real problem, we could add a
>     command-line option to make False and True aliases for 0 and 1 and
>     bool an alias for int.

Please, no ! 

Ideal would be to make bool a subtype of int and True and
False two singletons created from 1 and 0 having the bool
type: that's simple and backwards compatible.

One idea for a possible addition:

Add boolean support to the array module so that it becomes
possible to create arrays of bits.

> Copyright
> 
>     This document has been placed in the public domain.
> 
> Local Variables:
> mode: indented-text
> indent-tabs-mode: nil
> fill-column: 70
> End:
> 
> --Guido van Rossum (home page: http://www.python.org/~guido/)
> 
> _______________________________________________
> Python-Dev mailing list
> Python-Dev@python.org
> http://mail.python.org/mailman/listinfo/python-dev

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
______________________________________________________________________
Company & Consulting:                           http://www.egenix.com/
Python Software:                   http://www.egenix.com/files/python/