LoginSignup
0
1

Pythonでインターフェイス的なものを使いたい

Posted at

はじめに

キャンプ場の予約状況を確認する簡単なアプリを作ろうとしていて、インターフェイスで予約可能かを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)と呼ぶ

おわりに

ダックタイピング初体験でこれはすごいと思う一方、メソッド名が被ったりしないか心配になってくる。自分だけならギリ良さそうだが、外部のライブラリなど入れたり自分の知らないどこかで同じ名前がある場合などがありそう。
そう思いつつ、ダックタイピングは見るからに強力な表現力なのでもっと知りたいと思った

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1