bpo-28974: `object.__format__(x, '')` is now equivalent to `str(x)` (#506)

rather than `format(str(self), '')`.
This commit is contained in:
Serhiy Storchaka 2017-05-13 12:40:52 +03:00 committed by GitHub
parent a66f9c6bb1
commit 7e19dbc92e
4 changed files with 12 additions and 9 deletions

View File

@ -1282,6 +1282,10 @@ Basic customization
The __format__ method of ``object`` itself raises a :exc:`TypeError` The __format__ method of ``object`` itself raises a :exc:`TypeError`
if passed any non-empty string. if passed any non-empty string.
.. versionchanged:: 3.7
``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather
than ``format(str(self), '')``.
.. _richcmpfuncs: .. _richcmpfuncs:
.. method:: object.__lt__(self, other) .. method:: object.__lt__(self, other)

View File

@ -89,6 +89,10 @@ Other Language Changes
a name are now supported. a name are now supported.
(Contributed by Serhiy Storchaka in :issue:`30024`.) (Contributed by Serhiy Storchaka in :issue:`30024`.)
* ``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather than
``format(str(self), '')``.
(Contributed by Serhiy Storchaka in :issue:`28974`.)
New Modules New Modules
=========== ===========

View File

@ -10,6 +10,9 @@ What's New in Python 3.7.0 alpha 1?
Core and Builtins Core and Builtins
----------------- -----------------
- bpo-28974: ``object.__format__(x, '')`` is now equivalent to ``str(x)``
rather than ``format(str(self), '')``.
- bpo-30024: Circular imports involving absolute imports with binding - bpo-30024: Circular imports involving absolute imports with binding
a submodule to a name are now supported. a submodule to a name are now supported.

View File

@ -4493,9 +4493,6 @@ static PyObject *
object___format___impl(PyObject *self, PyObject *format_spec) object___format___impl(PyObject *self, PyObject *format_spec)
/*[clinic end generated code: output=34897efb543a974b input=7c3b3bc53a6fb7fa]*/ /*[clinic end generated code: output=34897efb543a974b input=7c3b3bc53a6fb7fa]*/
{ {
PyObject *self_as_str = NULL;
PyObject *result = NULL;
/* Issue 7994: If we're converting to a string, we /* Issue 7994: If we're converting to a string, we
should reject format specifications */ should reject format specifications */
if (PyUnicode_GET_LENGTH(format_spec) > 0) { if (PyUnicode_GET_LENGTH(format_spec) > 0) {
@ -4504,12 +4501,7 @@ object___format___impl(PyObject *self, PyObject *format_spec)
self->ob_type->tp_name); self->ob_type->tp_name);
return NULL; return NULL;
} }
self_as_str = PyObject_Str(self); return PyObject_Str(self);
if (self_as_str != NULL) {
result = PyObject_Format(self_as_str, format_spec);
Py_DECREF(self_as_str);
}
return result;
} }
/*[clinic input] /*[clinic input]