bpo-20092. Use __index__ in constructors of int, float and complex. (… · python/cpython@bdbad71
@@ -318,6 +318,11 @@ are always available. They are listed here in alphabetical order.
318318:class:`int` and :class:`float`. If both arguments are omitted, returns
319319 ``0j``.
320320321+ For a general Python object ``x``, ``complex(x)`` delegates to
322+ ``x.__complex__()``. If ``__complex__()`` is not defined then it falls back
323+ to :meth:`__float__`. If ``__float__()`` is not defined then it falls back
324+ to :meth:`__index__`.
325+321326 .. note::
322327323328 When converting from a string, the string must not contain whitespace
@@ -330,6 +335,10 @@ are always available. They are listed here in alphabetical order.
330335 .. versionchanged:: 3.6
331336 Grouping digits with underscores as in code literals is allowed.
332337338+ .. versionchanged:: 3.8
339+ Falls back to :meth:`__index__` if :meth:`__complex__` and
340+:meth:`__float__` are not defined.
341+333342334343.. function:: delattr(object, name)
335344@@ -584,7 +593,8 @@ are always available. They are listed here in alphabetical order.
584593 float, an :exc:`OverflowError` will be raised.
585594586595 For a general Python object ``x``, ``float(x)`` delegates to
587- ``x.__float__()``.
596+ ``x.__float__()``. If ``__float__()`` is not defined then it falls back
597+ to :meth:`__index__`.
588598589599 If no argument is given, ``0.0`` is returned.
590600@@ -609,6 +619,9 @@ are always available. They are listed here in alphabetical order.
609619 .. versionchanged:: 3.7
610620 *x* is now a positional-only parameter.
611621622+ .. versionchanged:: 3.8
623+ Falls back to :meth:`__index__` if :meth:`__float__` is not defined.
624+612625613626.. index::
614627 single: __format__
@@ -780,7 +793,8 @@ are always available. They are listed here in alphabetical order.
780793781794 Return an integer object constructed from a number or string *x*, or return
782795 ``0`` if no arguments are given. If *x* defines :meth:`__int__`,
783- ``int(x)`` returns ``x.__int__()``. If *x* defines :meth:`__trunc__`,
796+ ``int(x)`` returns ``x.__int__()``. If *x* defines :meth:`__index__`,
797+ it returns ``x.__index__()``. If *x* defines :meth:`__trunc__`,
784798 it returns ``x.__trunc__()``.
785799 For floating point numbers, this truncates towards zero.
786800@@ -812,6 +826,9 @@ are always available. They are listed here in alphabetical order.
812826 .. versionchanged:: 3.7
813827 *x* is now a positional-only parameter.
814828829+ .. versionchanged:: 3.8
830+ Falls back to :meth:`__index__` if :meth:`__int__` is not defined.
831+815832816833.. function:: isinstance(object, classinfo)
817834