gh-117110: Fix subclasses of typing.Any with custom constructors (#117111)

This commit is contained in:
傅立业(Chris Fu) 2024-03-29 08:19:20 +08:00 committed by GitHub
parent a17f313e39
commit 8eec7ed714
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 1 deletions

View File

@ -140,6 +140,26 @@ class AnyTests(BaseTestCase):
self.assertIsInstance(ms, Something)
self.assertIsInstance(ms, Mock)
def test_subclassing_with_custom_constructor(self):
class Sub(Any):
def __init__(self, *args, **kwargs): pass
# The instantiation must not fail.
Sub(0, s="")
def test_multiple_inheritance_with_custom_constructors(self):
class Foo:
def __init__(self, x):
self.x = x
class Bar(Any, Foo):
def __init__(self, x, y):
self.y = y
super().__init__(x)
b = Bar(1, 2)
self.assertEqual(b.x, 1)
self.assertEqual(b.y, 2)
def test_cannot_instantiate(self):
with self.assertRaises(TypeError):
Any()

View File

@ -539,7 +539,7 @@ class Any(metaclass=_AnyMeta):
def __new__(cls, *args, **kwargs):
if cls is Any:
raise TypeError("Any cannot be instantiated")
return super().__new__(cls, *args, **kwargs)
return super().__new__(cls)
@_SpecialForm

View File

@ -0,0 +1 @@
Fix a bug that prevents subclasses of :class:`typing.Any` to be instantiated with arguments. Patch by Chris Fu.