from __ future __ import annotationsとは?
※ コードは説明に特化したコードであくまで例です。。 🙇♀️
調べるきっかけ
- 開発していてたまたま見かけたコードで単純になんだろうと思ったので調べた
from future import annotationsとは何か?
__ future __
とは?
- Pythonが用意してくれているモジュール
- (ちょっと詳しくはよく理解できなかったので公式ドキュメントだけ貼っときます・・)
future - Future statement definitions - Python 3.9.5 documentation
どういうときに使うのか?
1. Python3.8以前でリストやタプルの型定義をするとき
Python3.8以前のリストやタプルの型定義のやり方
# パターン1: typing パッケージを使う # 'List' を使う from typing import List number_lists: List[int] = [1, 2, 3] # パターン2: from __future__ import annotationsを先頭に書くパターン # 'list' を使う from __future__ import annotations number_lists: list[int] = [1, 2, 3]
⭐ ポイント
- Python3.6では
__future__
を使えないっぽいので、パターン1しか書けないようです - Python3.9以降では、
from __future__ import annotations
を書かなくてもパターン2を使用することができるようです
2021年版Pythonの型ヒントの書き方 (for Python 3.9) | フューチャー技術ブログ
2. Python3.7~3.9で引数に複数の型を設定したいとき
from __future__ import annotations def display_id(name: int | str) -> str:
- Python3.6では、typingの
Union
を使用して↓のように書きます
from typing import Union def display_id(name: Union[int, str]) -> str:
2021年版Pythonの型ヒントの書き方 (for Python 3.9) | フューチャー技術ブログ
3. Python3.7以降で自作関数を戻り値の型定義としたい時
例えば以下のようなクラスを返したい時
class User(): def __init__(self, first_name: str, name: str, age: int): self.first_name = first_name self.name = name self.age = age @classmethod def func(cls, fullname: str, age: int) -> User: # fullnameとageからUserオブジェクトを返すメソッド # 処理は省略.
# パターン1 # from __future__ import annotationsを使う時 # 戻り値の型に、User とかけます from __future__ import annotations class User(): 省略 @classmethod def func(cls, fullname: str, age: int) -> User: # パターン2 # typing を使う時 # ' ' (シングルクォーテーション)が必要 class User(): 省略 @classmethod def func(cls, fullname: str, age: int) -> 'User':
pythonの型ヒントで自作クラスを指定したい|teratail
他にもありそうですが、ここまでで、なんとなく存在意義を理解したのでここまで。
他は都度学んだら書くようにしようかなと思います。