diff --git a/mypy/subtypes.py b/mypy/subtypes.py index cb630c68b62a..ade5462283dc 100644 --- a/mypy/subtypes.py +++ b/mypy/subtypes.py @@ -735,7 +735,7 @@ def non_method_protocol_members(tp: TypeInfo) -> List[str]: for member in tp.protocol_members: typ = get_proper_type(find_member(member, instance, instance)) - if not isinstance(typ, CallableType): + if not isinstance(typ, (Overloaded, CallableType)): result.append(member) return result diff --git a/test-data/unit/check-protocols.test b/test-data/unit/check-protocols.test index f13d2bc597da..41c739952923 100644 --- a/test-data/unit/check-protocols.test +++ b/test-data/unit/check-protocols.test @@ -2270,7 +2270,7 @@ y: PBad = None # E: Incompatible types in assignment (expression has type "None [out] [case testOnlyMethodProtocolUsableWithIsSubclass] -from typing import Protocol, runtime_checkable, Union, Type +from typing import Protocol, runtime_checkable, Union, Type, Sequence, overload @runtime_checkable class P(Protocol): def meth(self) -> int: @@ -2292,6 +2292,17 @@ if issubclass(cls, P): reveal_type(cls) # N: Revealed type is "Type[__main__.C]" else: reveal_type(cls) # N: Revealed type is "Type[__main__.E]" + +@runtime_checkable +class POverload(Protocol): + @overload + def meth(self, a: int) -> float: ... + @overload + def meth(self, a: str) -> Sequence[float]: ... + def meth(self, a): + pass + +reveal_type(issubclass(int, POverload)) # N: Revealed type is "builtins.bool" [builtins fixtures/isinstance.pyi] [typing fixtures/typing-full.pyi] [out]