[Python-Dev] [Python-checkins] cpython: Issue 12647: Add __bool__() method to the None object.
Brett Cannon
brett at python.org
Fri Jul 29 22:08:30 CEST 2011
On Thu, Jul 28, 2011 at 09:55, raymond.hettinger <python-checkins at python.org
> wrote:
> http://hg.python.org/cpython/rev/ccce01988603
> changeset: 71542:ccce01988603
> user: Raymond Hettinger <python at rcn.com>
> date: Thu Jul 28 09:55:13 2011 -0700
> summary:
> Issue 12647: Add __bool__() method to the None object.
>
> files:
> Lib/test/test_descr.py | 3 -
> Misc/NEWS | 4 ++
> Objects/object.c | 46 ++++++++++++++++++++++++++++-
> 3 files changed, 48 insertions(+), 5 deletions(-)
>
>
> diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
> --- a/Lib/test/test_descr.py
> +++ b/Lib/test/test_descr.py
> @@ -2068,9 +2068,6 @@
> # Two essentially featureless objects, just inheriting stuff from
> # object.
> self.assertEqual(dir(NotImplemented), dir(Ellipsis))
> - if support.check_impl_detail():
> - # None differs in PyPy: it has a __nonzero__
> - self.assertEqual(dir(None), dir(Ellipsis))
>
>
Wasn't this change only in 3.3 where __nonzero__ doesn't exist? So when PyPy
eventually supports Python 3 they will have to update to support __bool__ on
None but this test won't exercise that for them. IOW I think the guard is
wrong and should go.
-Brett
> # Nasty test case for proxied objects
> class Wrapper(object):
> diff --git a/Misc/NEWS b/Misc/NEWS
> --- a/Misc/NEWS
> +++ b/Misc/NEWS
> @@ -13,6 +13,10 @@
> - Verify the types of AST strings and identifiers provided by the user
> before
> compiling them.
>
> +- Issue #12647: The None object now has a __bool__() method that returns
> False.
> + Formerly, bool(None) returned False only because of special case logic
> + in PyObject_IsTrue().
> +
> - Issue #12579: str.format_map() now raises a ValueError if used on a
> format string that contains positional fields. Initial patch by
> Julian Berman.
> diff --git a/Objects/object.c b/Objects/object.c
> --- a/Objects/object.c
> +++ b/Objects/object.c
> @@ -1255,7 +1255,7 @@
> }
>
> /*
> -None is as a non-NULL undefined value.
> +None is a non-NULL undefined value.
> There is (and should be!) no way to create other objects of this type,
> so there is exactly one (which is indestructible, by the way).
> */
> @@ -1277,6 +1277,48 @@
> Py_FatalError("deallocating None");
> }
>
> +static int
> +none_bool(PyObject *v)
> +{
> + return 0;
> +}
> +
> +static PyNumberMethods none_as_number = {
> + 0, /* nb_add */
> + 0, /* nb_subtract */
> + 0, /* nb_multiply */
> + 0, /* nb_remainder */
> + 0, /* nb_divmod */
> + 0, /* nb_power */
> + 0, /* nb_negative */
> + 0, /* nb_positive */
> + 0, /* nb_absolute */
> + (inquiry)none_bool, /* nb_bool */
> + 0, /* nb_invert */
> + 0, /* nb_lshift */
> + 0, /* nb_rshift */
> + 0, /* nb_and */
> + 0, /* nb_xor */
> + 0, /* nb_or */
> + 0, /* nb_int */
> + 0, /* nb_reserved */
> + 0, /* nb_float */
> + 0, /* nb_inplace_add */
> + 0, /* nb_inplace_subtract */
> + 0, /* nb_inplace_multiply */
> + 0, /* nb_inplace_remainder */
> + 0, /* nb_inplace_power */
> + 0, /* nb_inplace_lshift */
> + 0, /* nb_inplace_rshift */
> + 0, /* nb_inplace_and */
> + 0, /* nb_inplace_xor */
> + 0, /* nb_inplace_or */
> + 0, /* nb_floor_divide */
> + 0, /* nb_true_divide */
> + 0, /* nb_inplace_floor_divide */
> + 0, /* nb_inplace_true_divide */
> + 0, /* nb_index */
> +};
>
> static PyTypeObject PyNone_Type = {
> PyVarObject_HEAD_INIT(&PyType_Type, 0)
> @@ -1289,7 +1331,7 @@
> 0, /*tp_setattr*/
> 0, /*tp_reserved*/
> none_repr, /*tp_repr*/
> - 0, /*tp_as_number*/
> + &none_as_number, /*tp_as_number*/
> 0, /*tp_as_sequence*/
> 0, /*tp_as_mapping*/
> 0, /*tp_hash */
>
> --
> Repository URL: http://hg.python.org/cpython
>
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20110729/bedd2567/attachment.html>
More information about the Python-Dev
mailing list