18.02.19 18:16, Rémi Lapeyre пише:
The documentation mentions at
https://docs.python.org/3/reference/datamodel.html#object.__index__
the need to always define both __index__ and __int__:
Note: In order to have a coherent integer type class, when
__index__() is defined __int__() should also be defined, and both should
return the same value.
Nick Coghlan proposes to make __int__ defaults to __index__ when only
the second
is defined and asked to open a discussion on python-dev before making
any change
"as the closest equivalent we have to this right now is the "negative"
derivation,
where overriding __eq__ without overriding __hash__ implicitly marks the
derived
class as unhashable (look for "type->tp_hash =
PyObject_HashNotImplemented;").".
I think the change proposed makes more sense than the current behavior and
volunteer to implement it if it is accepted.
Should we add default implementations of __float__ and __complex__ when
either __index__ or __int__ is defined? Currently:
>>> class A:
... def __int__(self): return 42
...
>>> int(A())
42
>>> float(A())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float() argument must be a string or a number, not 'A'
>>> complex(A())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: complex() first argument must be a string or a number, not 'A'
Or just document that in order to have a coherent integer type class,
when __index__() or __int__() are defined __float__() and __complex__()
should also be defined, and all should return equal values.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com