Microsoft の Python 向け型チェッカーの pyright が最新の仕様に対応していると聞いて README を流し読みしていたら、今までウォッチしていなかった PEP 604 (Complementary syntax for Union[]) というのがリストアップされていたので目を通してみました。
ちなみに次の記事で PEP-612 についても書く予定です。
概要
- 毎回
Union[int, str]
って書くのうざくない? - Scala みたいに
int | str
って書けるようにしようよ - 型アノテーションだけじゃなくて、
isinstance()
やissubclass()
でも使えるようにしようよ
アプローチ
- 型同士を
|
でつなぐと型集合をつくれるようにする
以上。
例
PEP にあるサンプルを見ると一目瞭然なので説明は省きます。
# in place of
# def f(list: List[Union[int, str]], param: Optional[int]) -> Union[float, str]
def f(list: List[int | str], param: int | None) -> float | str:
pass
f([1, "abc"], None)
assert str | int == Union[str,int]
assert str | int | float == Union[str, int, float]
assert isinstance("", int | str)
assert issubclass(bool, int | float)
感想
- 正直な感想としてキモい…
- Scala で見かけるとあんまり違和感はないのに、Python として見るとなんだかゾワゾワするのは単に慣れていないだけだろうか
- Union を書くのは楽になるけど
List[int | str]
を書くのにはあまりメリットないですね… - まだ Draft なので採用は決まってません