Skip to content

Commit

Permalink
[3.12] gh-117110: Fix subclasses of typing.Any with custom constructo…
Browse files Browse the repository at this point in the history
…rs (GH-117111) (#117357)

gh-117110: Fix subclasses of typing.Any with custom constructors (GH-117111)
(cherry picked from commit 8eec7ed)

Co-authored-by: 傅立业(Chris Fu) <17433201@qq.com>
  • Loading branch information
miss-islington and Azureblade3808 committed Mar 29, 2024
1 parent 655c425 commit 9f831f4
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
20 changes: 20 additions & 0 deletions Lib/test/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,26 @@ class MockSomething(Something, Mock): pass
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()
Expand Down
2 changes: 1 addition & 1 deletion Lib/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a bug that prevents subclasses of :class:`typing.Any` to be instantiated with arguments. Patch by Chris Fu.

0 comments on commit 9f831f4

Please sign in to comment.