はじめに
キャンプ場の予約状況を確認する簡単なアプリを作ろうとしていて、インターフェイスで予約可能かをboolで返すメソッドの実装を強制したかった。Python初学者なのでPythonにインターフェイスがないことを知ってえっ? となったが、近いことのできる仕組みにProtocolなる仕組みがあることを知ったのでまとめておく
from typing import Protocol
class SiteAvailability(Protocol):
def check(self) -> bool:
...
class Site1:
def check(self) -> bool:
return True
class Site2:
def check(self) -> bool:
return False
def check_availability(site_available: SiteAvailability) -> bool:
return site_available.check()
print(check_availability(Site1()))
print(check_availability(Site2()))
こう書くと、check()メソッドが実装されているならそれぞれで実装したcheckが呼ばれる。クラスが別であっても同じ名前のメソッドを使用することができ、異なるオブジェクトで同じ操作を切り替えて使うことができる。これをダックタイピング(duck typing)と呼ぶ
おわりに
ダックタイピング初体験でこれはすごいと思う一方、メソッド名が被ったりしないか心配になってくる。自分だけならギリ良さそうだが、外部のライブラリなど入れたり自分の知らないどこかで同じ名前がある場合などがありそう。
そう思いつつ、ダックタイピングは見るからに強力な表現力なのでもっと知りたいと思った