Skip to content

Commit

Permalink
gh-104555: Fix isinstance() and issubclass() for runtime-checkable pr…
Browse files Browse the repository at this point in the history
…otocols that use PEP 695 (#104556)

Fixes #104555
  • Loading branch information
AlexWaygood authored May 16, 2023
1 parent f40890b commit 1163782
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
18 changes: 18 additions & 0 deletions Lib/test/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -3134,6 +3134,24 @@ def bar(self, x: str) -> str:

self.assertIsInstance(Test(), PSub)

def test_pep695_generic_protocol_callable_members(self):
@runtime_checkable
class Foo[T](Protocol):
def meth(self, x: T) -> None: ...

class Bar[T]:
def meth(self, x: T) -> None: ...

self.assertIsInstance(Bar(), Foo)
self.assertIsSubclass(Bar, Foo)

@runtime_checkable
class SupportsTrunc[T](Protocol):
def __trunc__(self) -> T: ...

self.assertIsInstance(0.0, SupportsTrunc)
self.assertIsSubclass(float, SupportsTrunc)

def test_init_called(self):
T = TypeVar('T')

Expand Down
2 changes: 1 addition & 1 deletion Lib/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -1663,7 +1663,7 @@ class _TypingEllipsis:
_TYPING_INTERNALS = frozenset({
'__parameters__', '__orig_bases__', '__orig_class__',
'_is_protocol', '_is_runtime_protocol', '__protocol_attrs__',
'__callable_proto_members_only__',
'__callable_proto_members_only__', '__type_params__',
})

_SPECIAL_NAMES = frozenset({
Expand Down

0 comments on commit 1163782

Please sign in to comment.