from typing import runtime_checkable, Protocol @runtime_checkable class Closable1(Protocol): def close(self): pass class Closable2(Protocol): def close(self): pass class ClosableImpl: def close(self): pass assert isinstance(ClosableImpl(), Closable1) assert issubclass(ClosableImpl, Closable1) assert isinstance(ClosableImpl(), Closable2) assert issubclass(ClosableImpl, Closable2) assert isinstance(ClosableImpl(), Protocol) B = Protocol assert issubclass(ClosableImpl, B)