LoginSignup
3
5

More than 3 years have passed since last update.

PEP 613 (Explicit Type Aliases) を読んだよメモ

Posted at

最近 python/peps をフォローして PEP の更新を追いかけるようにしているのだが、GvR が PEP 613 (Explicit Type Aliases) は (3.9 ではなく) 3.10 に入れよう的なことを言っていたのでちょっと読んでみた。

I think it’s too late to add to 3.9, but it can be added to typing_extensions, and of course 3.10 is open (the master branch is now 3.10).
https://github.com/python/peps/issues/1412#issuecomment-633641359

概要

  • PEP-484 (Type Hints) では型エイリアスの存在については言及しているが、どう定義するのかを詳しく決めていなかった
    • 今のところ グローバル変数 でなおかつ 型ヒントの付いていない変数 を型エイリアスとみなしている
    • Forward Reference 問題やスコープなどで問題が起きがち
  • そこで明示的に型エイリアスを定義できるようにするよ
  • これまで通り暗黙的な型エイリアスの定義もしてもいいよ
  • ステータスは Accepted なのでいずれ実装される (たぶん 3.10)

アプローチ

  • 新たに typing.TypeAlias を追加する
  • 型エイリアスを定義するときは T: TypeAlias = int のように型エイリアス型の変数を記述する
  • グローバルレベルで定義された変数を型エイリアスとみなす
  • ForwardReference するときは T: TypeAlias = "int" と書いてもよい

明示的な文法では以下のように扱われる。

# 単なるグローバル変数
x = 1
x: int = 1

# 単なるグローバル変数
x = int
x: Type[int] = int

# 型エイリアス
x: TypeAlias = int
x: TypeAlias = MyClass

感想

  • Forward Refernece を考えると単なる文字列文字列定数も 型を指している可能性がある と扱う必要があったのが、explicit syntax だとセマンティックに書けるようになった
  • とはいえ、これまでの implicit syntax がなくなるわけではないので、なにかが変わるわけでもない
  • 利用する側としてはとりあえず TypeAlias 型を付けておけば安心
    • なのだけど、その実装は(はやくても) 3.10 からなので使えるのは来年秋以降ですよ…
  • 理由もわかるし、反対する理由もないのだけど、出るのがおそすぎて使われない予感しかしない
  • 動作確認してないけど pyre ではすでに実装されてるっぽい?
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5