mirror of
https://github.com/python/cpython.git
synced 2025-10-02 21:25:24 +00:00
Issue 12647: Add __bool__() method to the None object.
This commit is contained in:
parent
a2250e61db
commit
66d2be8986
3 changed files with 48 additions and 5 deletions
|
@ -2068,9 +2068,6 @@ order (MRO) for bases """
|
||||||
# Two essentially featureless objects, just inheriting stuff from
|
# Two essentially featureless objects, just inheriting stuff from
|
||||||
# object.
|
# object.
|
||||||
self.assertEqual(dir(NotImplemented), dir(Ellipsis))
|
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))
|
|
||||||
|
|
||||||
# Nasty test case for proxied objects
|
# Nasty test case for proxied objects
|
||||||
class Wrapper(object):
|
class Wrapper(object):
|
||||||
|
|
|
@ -13,6 +13,10 @@ Core and Builtins
|
||||||
- Verify the types of AST strings and identifiers provided by the user before
|
- Verify the types of AST strings and identifiers provided by the user before
|
||||||
compiling them.
|
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
|
- Issue #12579: str.format_map() now raises a ValueError if used on a
|
||||||
format string that contains positional fields. Initial patch by
|
format string that contains positional fields. Initial patch by
|
||||||
Julian Berman.
|
Julian Berman.
|
||||||
|
|
|
@ -1255,7 +1255,7 @@ PyObject_Dir(PyObject *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
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,
|
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).
|
so there is exactly one (which is indestructible, by the way).
|
||||||
*/
|
*/
|
||||||
|
@ -1277,6 +1277,48 @@ none_dealloc(PyObject* ignore)
|
||||||
Py_FatalError("deallocating None");
|
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 = {
|
static PyTypeObject PyNone_Type = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||||
|
@ -1289,7 +1331,7 @@ static PyTypeObject PyNone_Type = {
|
||||||
0, /*tp_setattr*/
|
0, /*tp_setattr*/
|
||||||
0, /*tp_reserved*/
|
0, /*tp_reserved*/
|
||||||
none_repr, /*tp_repr*/
|
none_repr, /*tp_repr*/
|
||||||
0, /*tp_as_number*/
|
&none_as_number, /*tp_as_number*/
|
||||||
0, /*tp_as_sequence*/
|
0, /*tp_as_sequence*/
|
||||||
0, /*tp_as_mapping*/
|
0, /*tp_as_mapping*/
|
||||||
0, /*tp_hash */
|
0, /*tp_hash */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue