diff options
author | Ethan Furman <ethan@stoneleaf.us> | 2020-12-24 20:02:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-24 20:02:38 (GMT) |
commit | f7dca9b9c864c1b7807014ea21a30cac76727e8b (patch) | |
tree | a9f8441e70fc490a5d1a5a843757bf13403faa19 | |
parent | 3bb85672bb894403a787a9c5afc0ca5987d28fe0 (diff) | |
download | cpython-f7dca9b9c864c1b7807014ea21a30cac76727e8b.zip cpython-f7dca9b9c864c1b7807014ea21a30cac76727e8b.tar.gz cpython-f7dca9b9c864c1b7807014ea21a30cac76727e8b.tar.bz2 |
[3.9] bpo-42727: [Enum] EnumMeta.__prepare__ now accepts **kwds (GH-23917). (GH-23926)
* [3.9] [Enum] EnumMeta.__prepare__ now accepts **kwds (GH-23917).
(cherry picked from commit 6ec0adefad60ec7cdec61c44baecf1dccc1461ab)
-rw-r--r-- | Lib/enum.py | 2 | ||||
-rw-r--r-- | Lib/test/test_enum.py | 12 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-12-23-19-43-06.bpo-42727.WH3ODh.rst | 2 |
3 files changed, 14 insertions, 2 deletions
diff --git a/Lib/enum.py b/Lib/enum.py index 88c951f..aa9f4b0 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -170,7 +170,7 @@ class EnumMeta(type): Metaclass for Enum """ @classmethod - def __prepare__(metacls, cls, bases): + def __prepare__(metacls, cls, bases, **kwds): # check that previous enum members do not exist metacls._check_for_existing_members(cls, bases) # create the namespace dict diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 0868c30..f6db731 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -2065,7 +2065,7 @@ class TestEnum(unittest.TestCase): except ValueError: pass - def test_init_subclass(self): + def test_init_subclass_calling(self): class MyEnum(Enum): def __init_subclass__(cls, **kwds): super(MyEnum, cls).__init_subclass__(**kwds) @@ -2101,6 +2101,16 @@ class TestEnum(unittest.TestCase): self.assertFalse(NeverEnum.__dict__.get('_test1', False)) self.assertFalse(NeverEnum.__dict__.get('_test2', False)) + def test_init_subclass_parameter(self): + class multiEnum(Enum): + def __init_subclass__(cls, multi): + for member in cls: + member._as_parameter_ = multi * member.value + class E(multiEnum, multi=3): + A = 1 + B = 2 + self.assertEqual(E.A._as_parameter_, 3) + self.assertEqual(E.B._as_parameter_, 6) class TestOrder(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2020-12-23-19-43-06.bpo-42727.WH3ODh.rst b/Misc/NEWS.d/next/Library/2020-12-23-19-43-06.bpo-42727.WH3ODh.rst new file mode 100644 index 0000000..a986cb9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-12-23-19-43-06.bpo-42727.WH3ODh.rst @@ -0,0 +1,2 @@ +`EnumMeta.__prepare__` now accepts `**kwds` to properly support +`__init_subclass__` |