[Python] コールバックの型をTypingのCallableで指定する

 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使うと長くて見ずらいなってときはこのように切り出すといいと思います。

コメントを残す

メールアドレスが公開されることはありません。