mirror of
https://github.com/python/cpython
synced 2024-09-05 08:17:45 +00:00
bpo-43827: Make arguments to abc.ABCMeta.__new__ pos-only (#25385)
To avoid conflicts with `__init__subclass__`.
This commit is contained in:
parent
a95138b2c5
commit
42fee931d0
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -753,6 +753,7 @@ Albert Hofkamp
|
|||
Chris Hogan
|
||||
Tomas Hoger
|
||||
Jonathan Hogg
|
||||
Vladyslav Hoi
|
||||
Kamilla Holanda
|
||||
Steve Holden
|
||||
Akintayo Holder
|
||||
|
|
|
@ -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__`.
|
Loading…
Reference in a new issue