[Python-3000] Status of True, False, bool type

Ron Adam rrr at ronadam.com
Mon Jan 1 22:57:00 CET 2007


Mike Orr wrote:
> On 1/1/07, Guido van Rossum <guido at python.org> wrote:
>> On 1/1/07, James Thiele <python3now at gmail.com> wrote:
>>> PEP 3100 states:
>>> None becomes a keyword [4] (What about True, False?)
>>>
>>> Has a decision been made?
>> No, but I think the argument for making True/False reserved words is
>> pretty weak.
>>
>>> Also a bool acts like an int in various contexts. For example:
>>>>>> True == 1
>>> True
>>>>>> False == 0
>>> True
>>>>>> 16 + (0 == 0)
>>> 17
>>>
>>> Will this behavior continue?
>> Yes. Don't confuse Python with Java.
> 
> Huh?  'True == 1' is a "feature"?  '16 + (0 == 0)' being illegal is a
> "Javaism"?  Would somebody care to explain this?  It's acceptable that
> 2 is true but not True?  Why do we need 1 for True at all if we have
> True?

None of the above examples are inconsistent with boolean algebra combined with 
pythons practice of promoting types in various situations.  Since bool is a 
subclass of int, it doesn't need promoting to int in these cases, but the 
results would be the same.

    http://www.allaboutcircuits.com/vol_4/chpt_7/2.html


The only place (I know of) where it seems out of order would be examples like...

    >>> True + True
    2
    >>> True == (True + True)
    False

Here the result of the addition two bools is an int instead of being a bool.


The AbstractBaseClass wiki has questions concerning where bool is in the class 
tree.  It shows bool as *not* being a subclass of int.

     http://wiki.python.org/moin/AbstractBaseClasses


So would adding two bools return an int or a bool if this is changed?

Should Bool be a subclass of Numeric instead of object?


The way python uses bools makes me think maybe the relationship between integers 
and bools should be reversed.  An integer could be a subclass of bool.  Then all 
positive integers, would also be equal to True.  But that would change the 
behavior of adding integers and bools, because the result would be either a True 
or False instead of an int because the int would be promoted to bool instead of 
the bool being (like promoted to) an int.

Cheers,
    Ron





More information about the Python-3000 mailing list