# external code.
_abc_invalidation_counter = 0
- def __new__(mcls, name, bases, namespace):
- cls = super().__new__(mcls, name, bases, namespace)
+ def __new__(mcls, name, bases, namespace, **kwargs):
+ cls = super().__new__(mcls, name, bases, namespace, **kwargs)
# Compute set of abstract method names
abstracts = {name
for name, value in namespace.items()
self.assertEqual(B.counter, 1)
+class TestABCWithInitSubclass(unittest.TestCase):
+ def test_works_with_init_subclass(self):
+ saved_kwargs = {}
+ class ReceivesClassKwargs:
+ def __init_subclass__(cls, **kwargs):
+ super().__init_subclass__()
+ saved_kwargs.update(kwargs)
+ class Receiver(ReceivesClassKwargs, abc.ABC, x=1, y=2, z=3):
+ pass
+ self.assertEqual(saved_kwargs, dict(x=1, y=2, z=3))
+
+
if __name__ == "__main__":
unittest.main()
- Issue #24142: Reading a corrupt config file left configparser in an
invalid state. Original patch by Florian Höch.
+- Issue #29581: ABCMeta.__new__ now accepts **kwargs, allowing abstract base
+ classes to use keyword parameters in __init_subclass__. Patch by Nate Soares.
+
Windows
-------