https://github.com/python/cpython/commit/7bb1e1a23634bae81bf76fdb34e9f9f7e59b3793
commit: 7bb1e1a23634bae81bf76fdb34e9f9f7e59b3793
branch: main
author: Xuehai Pan <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2025-04-06T16:37:37Z
summary:
gh-132159: Do not shadow user arguments in generated `__new__` by
`@warnings.deprecated` (#132160)
files:
A Misc/NEWS.d/next/Library/2025-04-06-16-12-49.gh-issue-132159.WvBfBm.rst
M Lib/test/test_warnings/__init__.py
M Lib/warnings.py
diff --git a/Lib/test/test_warnings/__init__.py
b/Lib/test/test_warnings/__init__.py
index 6f4c569d247601..de4280cd22f0c9 100644
--- a/Lib/test/test_warnings/__init__.py
+++ b/Lib/test/test_warnings/__init__.py
@@ -1653,6 +1653,25 @@ class Child(Base, Mixin):
instance = Child(42)
self.assertEqual(instance.a, 42)
+ def test_do_not_shadow_user_arguments(self):
+ new_called = False
+ new_called_cls = None
+
+ @deprecated("MyMeta will go away soon")
+ class MyMeta(type):
+ def __new__(mcs, name, bases, attrs, cls=None):
+ nonlocal new_called, new_called_cls
+ new_called = True
+ new_called_cls = cls
+ return super().__new__(mcs, name, bases, attrs)
+
+ with self.assertWarnsRegex(DeprecationWarning, "MyMeta will go away
soon"):
+ class Foo(metaclass=MyMeta, cls='haha'):
+ pass
+
+ self.assertTrue(new_called)
+ self.assertEqual(new_called_cls, 'haha')
+
def test_existing_init_subclass(self):
@deprecated("C will go away soon")
class C:
diff --git a/Lib/warnings.py b/Lib/warnings.py
index df844253ab4e6d..0307f89dafef5a 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -597,7 +597,7 @@ def __call__(self, arg, /):
original_new = arg.__new__
@functools.wraps(original_new)
- def __new__(cls, *args, **kwargs):
+ def __new__(cls, /, *args, **kwargs):
if cls is arg:
warn(msg, category=category, stacklevel=stacklevel + 1)
if original_new is not object.__new__:
diff --git
a/Misc/NEWS.d/next/Library/2025-04-06-16-12-49.gh-issue-132159.WvBfBm.rst
b/Misc/NEWS.d/next/Library/2025-04-06-16-12-49.gh-issue-132159.WvBfBm.rst
new file mode 100644
index 00000000000000..8cec76e9b47405
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-04-06-16-12-49.gh-issue-132159.WvBfBm.rst
@@ -0,0 +1 @@
+Do not shadow user arguments in generated :meth:`!__new__` by decorator
:class:`warnings.deprecated`. Patch by Xuehai Pan.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]