mirror of
https://github.com/python/cpython
synced 2024-09-16 00:27:20 +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
|
implementations defined by the registering ABC be callable (not
|
||||||
even via super()).
|
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)
|
cls = super().__new__(mcls, name, bases, namespace, **kwargs)
|
||||||
_abc_init(cls)
|
_abc_init(cls)
|
||||||
return cls
|
return cls
|
||||||
|
|
|
@ -668,6 +668,19 @@ def __init_subclass__(cls, **kwargs):
|
||||||
class Receiver(ReceivesClassKwargs, abc_ABC, x=1, y=2, z=3):
|
class Receiver(ReceivesClassKwargs, abc_ABC, x=1, y=2, z=3):
|
||||||
pass
|
pass
|
||||||
self.assertEqual(saved_kwargs, dict(x=1, y=2, z=3))
|
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
|
return TestLegacyAPI, TestABC, TestABCWithInitSubclass
|
||||||
|
|
||||||
TestLegacyAPI_Py, TestABC_Py, TestABCWithInitSubclass_Py = test_factory(abc.ABCMeta,
|
TestLegacyAPI_Py, TestABC_Py, TestABCWithInitSubclass_Py = test_factory(abc.ABCMeta,
|
||||||
|
|
|
@ -753,6 +753,7 @@ Albert Hofkamp
|
||||||
Chris Hogan
|
Chris Hogan
|
||||||
Tomas Hoger
|
Tomas Hoger
|
||||||
Jonathan Hogg
|
Jonathan Hogg
|
||||||
|
Vladyslav Hoi
|
||||||
Kamilla Holanda
|
Kamilla Holanda
|
||||||
Steve Holden
|
Steve Holden
|
||||||
Akintayo Holder
|
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