typingでコールバックをどう表現するかについて。
コールバックはtypingで以下のように表現できます。
Callable[[引数1, 引数2, ...], 戻り値]
サンプル実装はこんな感じ。
from typing import Tuple, Callable
def sample_func(callback: Callable[[str, int], Tuple[str, int, str]]):
# TODO 何かしらの処理
arg_str = ""
arg_int = 100
ret1_str, ret_int, ret_str2 = callback(arg_str, arg_int)
ただ、このサンプルを見てわかる通り、Callableを使うと長くなってしまいます。
typingは自作で型を作ることができるので、コールバックの型と戻り値の型を切り出してみましょう。(引数は切り出すとエディタで警告が出る…)
これでだいぶすっきりしたかと思います。
from typing import Generic, TypeVar, Tuple, List, Callable
ReturnType = Tuple[str, int, str]
CallbackType = Callable[[str, int], ReturnType]
def sample_func(callback: CallbackType):
# TODO 何かしらの処理
arg_str = ""
arg_int = 100
ret1_str, ret_int, ret_str2 = callback(arg_str, arg_int)
クラスとか作るほどじゃないけどCallable使うと長くて見ずらいなってときはこのように切り出すといいと思います。