🙆
【Python】インターフェイスの型ヒントを実現する
Pythonは動的型付けなのでダックタイピング(同名で呼び出せるなら)が可能です。
しかし、型ヒントの需要が増している現在ではインターフェイス的な型定義が欲しくなってきます。
そんなときに使えるのが typing.Protocol
です。
使い方
from typing import Protocol
class Proto(Protocol):
def meth(self) -> int:
...
class C:
def meth(self) -> int:
return 0
def func(x: Proto) -> int:
return x.meth()
print(func(C())) # 0 が表示される
# 以下は型チェックのエラーが出る
print(func("")) # AttributeError: 'str' object has no attribute 'meth'
print(func(Proto())) # TypeError: Protocols cannot be instantiated
公式ドキュメントに書いてあるとおり typing.Protocol
を親にしたらOKです。
C
クラスは Proto
と継承関係にないですが型チェックが実現できています。
Discussion