Skip to content

Do not shadow user arguments in generated __new__ by @warnings.deprecated #132159

@XuehaiPan

Description

@XuehaiPan

Bug report

Bug description:

Follow comment #132055 (comment)

from warnings import deprecated


@deprecated("MyMeta will go away soon")
class MyMeta(type):
    def __new__(mcs, name, bases, attrs, cls=None):
        return super().__new__(mcs, name, bases, attrs)


class Foo(metaclass=MyMeta, cls='haha'):
    pass

Output:

$ python3 test.py
Traceback (most recent call last):
  File "/Users/PanXuehai/Projects/cpython/test.py", line 10, in <module>
    class Foo(metaclass=MyMeta, cls='haha'):
        pass
TypeError: MyMeta.__new__() got multiple values for argument 'cls'

CPython versions tested on:

3.13

Operating systems tested on:

macOS

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions