- patch #1600346 submitted by Tomer Filiba

- Renamed nb_nonzero slots to nb_bool
- Renamed __nonzero__ methods to __bool__
- update core, lib, docs, and tests to match
This commit is contained in:
Jack Diederich 2006-11-28 19:15:13 +00:00
parent dfc9d4f7aa
commit 4dafcc4ece
31 changed files with 118 additions and 82 deletions

View file

@ -55,7 +55,7 @@ and support truth tests, identity tests, and boolean operations:
Return the outcome of \keyword{not} \var{o}. (Note that there is no
\method{__not__()} method for object instances; only the interpreter
core defines this operation. The result is affected by the
\method{__nonzero__()} and \method{__len__()} methods.)
\method{__bool__()} and \method{__len__()} methods.)
\end{funcdesc}
\begin{funcdesc}{truth}{o}

View file

@ -51,7 +51,7 @@ The following values are considered false:
\item any empty mapping, for example, \code{\{\}}.
\item instances of user-defined classes, if the class defines a
\method{__nonzero__()} or \method{__len__()} method, when that
\method{__bool__()} or \method{__len__()} method, when that
method returns the integer zero or \class{bool} value
\code{False}.\footnote{Additional
information on these special methods may be found in the

View file

@ -162,13 +162,13 @@ the module interface) that compare the cost of using
missing and present object attributes.
\begin{verbatim}
% timeit.py 'try:' ' str.__nonzero__' 'except AttributeError:' ' pass'
% timeit.py 'try:' ' str.__bool__' 'except AttributeError:' ' pass'
100000 loops, best of 3: 15.7 usec per loop
% timeit.py 'if hasattr(str, "__nonzero__"): pass'
% timeit.py 'if hasattr(str, "__bool__"): pass'
100000 loops, best of 3: 4.26 usec per loop
% timeit.py 'try:' ' int.__nonzero__' 'except AttributeError:' ' pass'
% timeit.py 'try:' ' int.__bool__' 'except AttributeError:' ' pass'
1000000 loops, best of 3: 1.43 usec per loop
% timeit.py 'if hasattr(int, "__nonzero__"): pass'
% timeit.py 'if hasattr(int, "__bool__"): pass'
100000 loops, best of 3: 2.23 usec per loop
\end{verbatim}
@ -176,7 +176,7 @@ missing and present object attributes.
>>> import timeit
>>> s = """\
... try:
... str.__nonzero__
... str.__bool__
... except AttributeError:
... pass
... """
@ -184,14 +184,14 @@ missing and present object attributes.
>>> print "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000)
17.09 usec/pass
>>> s = """\
... if hasattr(str, '__nonzero__'): pass
... if hasattr(str, '__bool__'): pass
... """
>>> t = timeit.Timer(stmt=s)
>>> print "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000)
4.85 usec/pass
>>> s = """\
... try:
... int.__nonzero__
... int.__bool__
... except AttributeError:
... pass
... """
@ -199,7 +199,7 @@ missing and present object attributes.
>>> print "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000)
1.97 usec/pass
>>> s = """\
... if hasattr(int, '__nonzero__'): pass
... if hasattr(int, '__bool__'): pass
... """
>>> t = timeit.Timer(stmt=s)
>>> print "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000)

View file

@ -375,7 +375,7 @@ This module offers the following functions:
also accept an integer, however, use of the handle object is
encouraged.
Handle objects provide semantics for \method{__nonzero__()} - thus
Handle objects provide semantics for \method{__bool__()} - thus
\begin{verbatim}
if handle:
print "Yes"

View file

@ -171,7 +171,7 @@ Hacks}{http://xmlrpc-c.sourceforge.net/hacks.php} page.
This class may be initialized from any Python value; the instance
returned depends only on its truth value. It supports various Python
operators through \method{__cmp__()}, \method{__repr__()},
\method{__int__()}, and \method{__nonzero__()} methods, all
\method{__int__()}, and \method{__bool__()} methods, all
implemented in the obvious ways.
It also has the following method, supported mainly for internal use by

View file

@ -1313,13 +1313,13 @@ of that object]{2.5}
\withsubitem{(object method)}{\ttindex{__cmp__()}}
\end{methoddesc}
\begin{methoddesc}[object]{__nonzero__}{self}
\begin{methoddesc}[object]{__bool__}{self}
Called to implement truth value testing, and the built-in operation
\code{bool()}; should return \code{False} or \code{True}, or their
integer equivalents \code{0} or \code{1}.
\code{bool()}; should return \code{False} or \code{True}.
When this method is not defined, \method{__len__()} is
called, if it is defined (see below). If a class defines neither
\method{__len__()} nor \method{__nonzero__()}, all its instances are
called, if it is defined (see below) and \code{True} is returned when
the length is not zero. If a class defines neither
\method{__len__()} nor \method{__bool__()}, all its instances are
considered true.
\withsubitem{(mapping object method)}{\ttindex{__len__()}}
\end{methoddesc}
@ -1693,9 +1693,9 @@ through the values.
Called to implement the built-in function
\function{len()}\bifuncindex{len}. Should return the length of the
object, an integer \code{>=} 0. Also, an object that doesn't define a
\method{__nonzero__()} method and whose \method{__len__()} method
\method{__bool__()} method and whose \method{__len__()} method
returns zero is considered to be false in a Boolean context.
\withsubitem{(object method)}{\ttindex{__nonzero__()}}
\withsubitem{(object method)}{\ttindex{__bool__()}}
\end{methoddesc}
\begin{methoddesc}[container object]{__getitem__}{self, key}