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:
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__: