Serhiy Storchaka added the comment:
There are similar issues with Decimal.from_float() (C implementation only),
chain.from_iterable(), epoll.fromfd() and kqueue.fromfd(). All these
alternative constructors don't call __new__ or __init__.
But float.fromhex() calls the constructor.
>>> import enum
>>> class M(float, enum.Enum):
... PI = 3.14
...
>>> M.PI
<M.PI: 3.14>
>>> M.fromhex((3.14).hex())
<M.PI: 3.14>
>>> M.fromhex((2.72).hex())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/serhiy/py/cpython/Lib/enum.py", line 241, in __call__
return cls.__new__(cls, value)
File "/home/serhiy/py/cpython/Lib/enum.py", line 476, in __new__
raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 2.72 is not a valid M
And this behavior looks correct to me.
----------
nosy: +facundobatista, mark.dickinson, rhettinger, skrah
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue23640>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com