New submission from Mark Dickinson <dicki...@gmail.com>:

The int constructor, when applied to a general Python object `obj`, first looks 
for an __int__ method, then for an __index__ method, and then finally for a 
__trunc__ method.

The delegation to __trunc__ used to be useful: it meant that users could write 
a custom class SomeNumber with the property that:

- SomeNumber instances supported 'int' calls, returning a truncated value, but
- SomeNumber instances weren't usable in indexing, chr() calls, and all the 
various other calls that implicitly invoked __int__.

class SomeNumber:
    def __trunc__(self):
       <return truncated value for self>

However, with Python >= 3.10, we no longer use __int__ implicitly for argument 
conversion in internal code. So the second point above is no longer a concern, 
and SomeNumber can now simply be written as

class SomeNumber:
    def __int__(self):
       <return truncated value for self>

This decouples int from __trunc__ and leaves __trunc__ as simply the support 
for the math.trunc function.

----------
messages: 400063
nosy: mark.dickinson
priority: normal
severity: normal
status: open
title: Deprecate delegation of int to __trunc__?

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44977>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to