Python でデフォルトの引数値のある関数に型ヒントをつける


◯ 問題

関数にデフォルトの引数値をつけることができます。これにどうやれば型をつけられるのか分からずハマっていました。

def combiner(*vals: bytes, maxlen: Optional[int] = None) -> List[bytes]:
    ...

◯ 対応

Protocol を継承させたクラスに __call__ をつけます。

from typing import Protocol

class Combiner(Protocol):
    def __call__(self, *vals: bytes, maxlen: Optional[int] = None) -> List[bytes]:
        ...

◯ 補足

Protocol は、本来は静的にダックタイピングをしたいときに使うものです。