Function Annotations


id:hope-echoesさんの日記からの引用。

def plus(lhs: int, rhs: int) -> int:
    """ただの足し算。"""
    return lhs + rhs

plus.__annotations__
# {'lhs': <class 'int'>, 'rhs': <class 'int'>, 'return': <class 'int'>}

型チェックしてくれる訳ではないが、(式の部分に)型を書くことができる。


アノテーション使えばCythonのpyxファイルやPyPyのRPythonでオリジナルのPythonの型宣言を構文拡張したり、型を指定するためのメソッドを追加したりしなくて済むと一瞬思ったけど、関数の引数の部分だけで、ローカル変数の型宣言をする方法がないから結局ダメかな。


どうせだったらオプショナルな型宣言の構文を追加した方が良かったのではないかな?Pythonは文法や構文を追加する際に、それ専用の構文を追加することを避けて、より汎用的な使い方ができる構文を追加するというポリシーらしいが、アノテーションに関してはどうなのだろう?専用の構文を避けるポリシーの例の1つが、staticmethodやclassmethodの構文を追加せずデコレータを追加したということ。