私はTypeScriptのバックグラウンドを持っています。私が取り組んでいるpythonプロジェクト(mypyを使用)に静的型チェックを導入しています。
TypeScriptでは、他の何か、つまり文字列を返すように注釈が付けられた関数からnullを返すことが有効です。
function test(flag: boolean): string {
if(flag) {
return 'success';
} else {
return null;
}
}
複数の潜在的な戻り値の型、つまり文字列またはブール値を持つように関数に注釈を付けることも有効です。
function test(flag: boolean): string | boolean {
if(flag) {
return 'success';
} else {
return false;
}
}
しかし、mypyを使用するpythonでは、str
を返すように注釈が付けられた関数からNoneを返すことは許可されていません。
def test(flag: bool) -> str:
if flag:
return 'success'
else:
return None
# [mypy] error:Incompatible return value type (got "None", expected "str")
さらに、複数の戻り値の型に注釈を付ける方法がわかりません。つまり、str | None
。
Mypyを使用してこのようなものにどのようにアプローチする必要がありますか?エラー状態からNoneを返す関数は、私のコードベース全体にあります。
さて、mypy gitterの@zsolのおかげで、ドキュメントに欠けていたものが見つかりました!
2つの便利なmypy機能は、PythonのタイピングモジュールからインポートできるOptionalタイプとUnionタイプです。 ドキュメントはこちら
関数がプライマリタイプに加えてNoneを返す可能性があることに注釈を付ける場合、つまりstr
はOptional
を使用します。
from typing import Optional
def test(flag: bool) -> Optional[str]:
if flag:
return 'success'
else:
return None
関数が複数の型を返す可能性があることに注釈を付けたい場合、つまりstr | bool
、Union
を使用:
from typing import Union
def test(flag: bool) -> Union[str, bool]:
if flag:
return 'success'
else:
return False