]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
bpo-42901: [Enum] move member creation to `__set_name__` (GH-24196)
authorEthan Furman <ethan@stoneleaf.us>
Wed, 13 Jan 2021 07:47:57 +0000 (23:47 -0800)
committerGitHub <noreply@github.com>
Wed, 13 Jan 2021 07:47:57 +0000 (23:47 -0800)
commitc314e60388282d9829762fb6c30b12e2807caa19
tree1c49d06b9882fec1c77d0a091baf9c0b93230e4f
parentc47c78b878ff617164b2b94ff711a6103e781753
bpo-42901: [Enum] move member creation to `__set_name__` (GH-24196)

`type.__new__` calls `__set_name__` and `__init_subclass__`, which means
that any work metaclasses do after calling `super().__new__()` will not
be available to those two methods.  In particular, `Enum` classes that
want to make use of `__init_subclass__` will not see any members.

Almost all customization is therefore moved to before the
`type.__new__()` call, including changing all members to a proto member
descriptor with a `__set_name__` that will do the final conversion of a
member to be an instance of the `Enum` class.
Lib/enum.py
Lib/inspect.py
Lib/test/test_enum.py
Misc/NEWS.d/next/Library/2021-01-11-17-36-59.bpo-42901.gFd-ta.rst [new file with mode: 0644]