私は 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 では、 return と注釈が付けられた関数から None を返すことはできませんstr
。
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 を返す関数がコードベース全体に存在します。
ベストアンサー1
はい、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