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
Document tuples and __new__ #114071
Labels
docs
Documentation in the Doc dir
Comments
Moved to #114149 |
ethanfurman
changed the title
Document the important fact that a tuple value of an Enum member is special-cased to be automatically unpacked as arguments to __new__
Document tuples and __new__
Jan 16, 2024
The |
ethanfurman
added a commit
that referenced
this issue
Feb 4, 2024
Update documentation with `__new__` and `__init__` entries. Support use of `auto()` in tuple subclasses on member assignment lines. Previously, auto() was only supported on the member definition line either solo or as part of a tuple: RED = auto() BLUE = auto(), 'azul' However, since Python itself supports using tuple subclasses where tuples are expected, e.g.: from collections import namedtuple T = namedtuple('T', 'first second third') def test(one, two, three): print(one, two, three) test(*T(4, 5, 6)) # 4 5 6 it made sense to also support tuple subclasses in enum definitions.
miss-islington
pushed a commit
to miss-islington/cpython
that referenced
this issue
Feb 4, 2024
…ythonGH-114871) Update documentation with `__new__` and `__init__` entries. Support use of `auto()` in tuple subclasses on member assignment lines. Previously, auto() was only supported on the member definition line either solo or as part of a tuple: RED = auto() BLUE = auto(), 'azul' However, since Python itself supports using tuple subclasses where tuples are expected, e.g.: from collections import namedtuple T = namedtuple('T', 'first second third') def test(one, two, three): print(one, two, three) test(*T(4, 5, 6)) GH- 4 5 6 it made sense to also support tuple subclasses in enum definitions. (cherry picked from commit ff7588b) Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
ethanfurman
added a commit
that referenced
this issue
Feb 8, 2024
…H-114871) (GH-114993) Update documentation with `__new__` and `__init__` entries. Support use of `auto()` in tuple subclasses on member assignment lines. Previously, auto() was only supported on the member definition line either solo or as part of a tuple: RED = auto() BLUE = auto(), 'azul' However, since Python itself supports using tuple subclasses where tuples are expected, e.g.: from collections import namedtuple T = namedtuple('T', 'first second third') def test(one, two, three): print(one, two, three) test(*T(4, 5, 6)) GH- 4 5 6 it made sense to also support tuple subclasses in enum definitions. (cherry picked from commit ff7588b) Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
aisk
pushed a commit
to aisk/cpython
that referenced
this issue
Feb 11, 2024
…ythonGH-114871) Update documentation with `__new__` and `__init__` entries. Support use of `auto()` in tuple subclasses on member assignment lines. Previously, auto() was only supported on the member definition line either solo or as part of a tuple: RED = auto() BLUE = auto(), 'azul' However, since Python itself supports using tuple subclasses where tuples are expected, e.g.: from collections import namedtuple T = namedtuple('T', 'first second third') def test(one, two, three): print(one, two, three) test(*T(4, 5, 6)) # 4 5 6 it made sense to also support tuple subclasses in enum definitions.
fsc-eriker
pushed a commit
to fsc-eriker/cpython
that referenced
this issue
Feb 14, 2024
…ythonGH-114871) Update documentation with `__new__` and `__init__` entries. Support use of `auto()` in tuple subclasses on member assignment lines. Previously, auto() was only supported on the member definition line either solo or as part of a tuple: RED = auto() BLUE = auto(), 'azul' However, since Python itself supports using tuple subclasses where tuples are expected, e.g.: from collections import namedtuple T = namedtuple('T', 'first second third') def test(one, two, three): print(one, two, three) test(*T(4, 5, 6)) # 4 5 6 it made sense to also support tuple subclasses in enum definitions.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In this StackOverflow answer, Ethan Furman, the author of the
enum
module, demonstrated how a tuple value is special-cased so that it can be unpacked as arguments to the constructor of the mixin type, making it possible to extremely elegantly implement a member type with additional information such as a label for each member as requested by the SO question:This outputs:
Such a neat behavior of a tuple value is currently undocumented in the Supported
__dunder__
names section of theenum
's docs, however, making it more of an implementation detail rather than a publicly usable feature.Please help document this feature properly so we can all benefit from the new possibilities this feature enables without fearing that we are using an undocumented implementation detail. Thanks.
Linked PRs
The text was updated successfully, but these errors were encountered: