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)