bpo-43827: Make arguments to abc.ABCMeta.__new__ pos-only (#25385)

To avoid conflicts with `__init__subclass__`.
This commit is contained in:
Vlad Hoi 2022-05-05 16:40:01 +03:00 committed by GitHub
parent a95138b2c5
commit 42fee931d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 1 deletions

View file

@ -102,7 +102,7 @@ class ABCMeta(type):
implementations defined by the registering ABC be callable (not
even via super()).
"""
def __new__(mcls, name, bases, namespace, **kwargs):
def __new__(mcls, name, bases, namespace, /, **kwargs):
cls = super().__new__(mcls, name, bases, namespace, **kwargs)
_abc_init(cls)
return cls

View file

@ -668,6 +668,19 @@ def __init_subclass__(cls, **kwargs):
class Receiver(ReceivesClassKwargs, abc_ABC, x=1, y=2, z=3):
pass
self.assertEqual(saved_kwargs, dict(x=1, y=2, z=3))
def test_positional_only_and_kwonlyargs_with_init_subclass(self):
saved_kwargs = {}
class A:
def __init_subclass__(cls, **kwargs):
super().__init_subclass__()
saved_kwargs.update(kwargs)
class B(A, metaclass=abc_ABCMeta, name="test"):
pass
self.assertEqual(saved_kwargs, dict(name="test"))
return TestLegacyAPI, TestABC, TestABCWithInitSubclass
TestLegacyAPI_Py, TestABC_Py, TestABCWithInitSubclass_Py = test_factory(abc.ABCMeta,

View file

@ -753,6 +753,7 @@ Albert Hofkamp
Chris Hogan
Tomas Hoger
Jonathan Hogg
Vladyslav Hoi
Kamilla Holanda
Steve Holden
Akintayo Holder

View file

@ -0,0 +1 @@
All positional-or-keyword parameters to ``ABCMeta.__new__`` are now positional-only to avoid conflicts with keyword arguments to be passed to :meth:`__init_subclass__`.