diff options
| author | Gregory Beauregard <greg@greg.red> | 2022-02-08 08:41:13 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-08 08:41:13 (GMT) |
| commit | cbdcae5ab90710e8d82c213f3798af1154670ff9 (patch) | |
| tree | 3bb048bde0cf2620f530b58a04ba08b213bac5d7 | |
| parent | 9539400390494f4930c245b3f98453592f4a1a8c (diff) | |
| download | cpython-cbdcae5ab90710e8d82c213f3798af1154670ff9.zip cpython-cbdcae5ab90710e8d82c213f3798af1154670ff9.tar.gz cpython-cbdcae5ab90710e8d82c213f3798af1154670ff9.tar.bz2 | |
[3.10] bpo-46676: Make ParamSpec args and kwargs equal to themselves (GH-31203) (GH-31210)
(cherry picked from commit c8b62bbe46e20d4b6dd556f2fa85960d1269aa45)
Co-authored-by: Gregory Beauregard <greg@greg.red>
| -rw-r--r-- | Lib/test/test_typing.py | 8 | ||||
| -rw-r--r-- | Lib/typing.py | 10 | ||||
| -rw-r--r-- | Misc/NEWS.d/next/Library/2022-02-07-19-20-42.bpo-46676.3Aws1o.rst | 1 |
3 files changed, 19 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 341be1d..6276241 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4823,12 +4823,20 @@ class ParamSpecTests(BaseTestCase): def test_args_kwargs(self): P = ParamSpec('P') + P_2 = ParamSpec('P_2') self.assertIn('args', dir(P)) self.assertIn('kwargs', dir(P)) self.assertIsInstance(P.args, ParamSpecArgs) self.assertIsInstance(P.kwargs, ParamSpecKwargs) self.assertIs(P.args.__origin__, P) self.assertIs(P.kwargs.__origin__, P) + self.assertEqual(P.args, P.args) + self.assertEqual(P.kwargs, P.kwargs) + self.assertNotEqual(P.args, P_2.args) + self.assertNotEqual(P.kwargs, P_2.kwargs) + self.assertNotEqual(P.args, P.kwargs) + self.assertNotEqual(P.kwargs, P.args) + self.assertNotEqual(P.args, P_2.kwargs) self.assertEqual(repr(P.args), "P.args") self.assertEqual(repr(P.kwargs), "P.kwargs") diff --git a/Lib/typing.py b/Lib/typing.py index 7743c7f..135ca58 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -830,6 +830,11 @@ class ParamSpecArgs(_Final, _Immutable, _root=True): def __repr__(self): return f"{self.__origin__.__name__}.args" + def __eq__(self, other): + if not isinstance(other, ParamSpecArgs): + return NotImplemented + return self.__origin__ == other.__origin__ + class ParamSpecKwargs(_Final, _Immutable, _root=True): """The kwargs for a ParamSpec object. @@ -849,6 +854,11 @@ class ParamSpecKwargs(_Final, _Immutable, _root=True): def __repr__(self): return f"{self.__origin__.__name__}.kwargs" + def __eq__(self, other): + if not isinstance(other, ParamSpecKwargs): + return NotImplemented + return self.__origin__ == other.__origin__ + class ParamSpec(_Final, _Immutable, _TypeVarLike, _root=True): """Parameter specification variable. diff --git a/Misc/NEWS.d/next/Library/2022-02-07-19-20-42.bpo-46676.3Aws1o.rst b/Misc/NEWS.d/next/Library/2022-02-07-19-20-42.bpo-46676.3Aws1o.rst new file mode 100644 index 0000000..408412e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-02-07-19-20-42.bpo-46676.3Aws1o.rst @@ -0,0 +1 @@ +Make :data:`typing.ParamSpec` args and kwargs equal to themselves. Patch by Gregory Beauregard. |
