New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
3.11.1 Regression: namedtuple Enum values are cast to tuple #100098
Labels
type-bug
An unexpected behavior, bug, or error
Comments
ethanfurman
added a commit
that referenced
this issue
Dec 8, 2022
…H-100099) When checking for auto() instances, only top-level usage is supported, which means either alone or as part of a regular tuple. Other containers, such as lists, dicts, or namedtuples, will not have auto() transformed into a value.
miss-islington
pushed a commit
to miss-islington/cpython
that referenced
this issue
Dec 8, 2022
…uto (pythonGH-100099) When checking for auto() instances, only top-level usage is supported, which means either alone or as part of a regular tuple. Other containers, such as lists, dicts, or namedtuples, will not have auto() transformed into a value. (cherry picked from commit ded02ca) Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
miss-islington
added a commit
that referenced
this issue
Dec 8, 2022
…H-100099) When checking for auto() instances, only top-level usage is supported, which means either alone or as part of a regular tuple. Other containers, such as lists, dicts, or namedtuples, will not have auto() transformed into a value. (cherry picked from commit ded02ca) Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
Thank you for the bug report. The fix will be in 3.11.2. If you need to use 3.11.1 you can inherit directly from >>> from enum import Enum
>>> from collections import namedtuple
>>> TTuple = namedtuple('TTuple', 'id a blist')
>>> class NTEnum(TTuple, Enum):
... NONE = TTuple(0, 0, [])
... A = TTuple(1, 2, [4])
... B = TTuple(2, 4, [0, 1, 2])
...
>>> NTEnum.A
<NTEnum.A: TTuple(id=1, a=2, blist=[4])>
>>>
>>> NTEnum.A.id
1
>>> NTEnum.B.blist
[0, 1, 2] On the up-side, the |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Zannick commentedDec 8, 2022
•
edited by bedevere-bot
Bug report
Between 3.11.0 and 3.11.1, Enums whose values are namedtuple objects have their values converted to tuple, which drops the field names we expect to be able to use, causing AttributeErrors. Test cases below create a namedtuple and an enum whose values are instances of that tuple. In the 3.11.1 case, referencing the enum value like
NTEnum.NONE.value
produces a tuple and not a namedtuple. In both cases,copy.copy
preserves the namedtuple type.It is not clear whether any item in the changelog or release notes references this change, nor could I quickly tell whether this was related to changes to address #93910.
Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32
Python 3.11.1 (tags/v3.11.1:a7a450f, Dec 6 2022, 19:58:39) [MSC v.1934 64 bit (AMD64)] on win32
Your environment
Linked PRs
The text was updated successfully, but these errors were encountered: