from typing import Protocol
class Closeable(Protocol):
def close(self) -> None: ...
def safe_use(resource: Closeable) -> None:
try:
# ... do work
pass
finally:
resource.close()
class File:
def close(self): print("file closed")
class Connection:
def close(self): print("conn closed")
safe_use(File()) # ✓ — has close()
safe_use(Connection()) # ✓ — has close()
# safe_use("hello") # mypy error — str has no close()
Create a free account and build your private vault. Share publicly whenever you want.