# typing --- 型ヒントのサポート | Python Doc
https://docs.python.org/ja/3.12/library/typing.html
from typing import Final, NamedTuple, TypedDict
INIT_PATH: Final[str] = "./users/"
MAX_ROW: Final[int] = 100_000_000
PLACE_NAMES: Final[tuple[str, str]] = ('東京', '大阪')
class TypedPerson(TypedDict):
r"""aaa"""
name: str # Finalは指定できない
age: int
no: int
PERSON_001: Final[TypedPerson] = {
'name': "Yamada Taro",
'age': 20,
'no': 123
}
class TypedBranch(NamedTuple):
r"""aaa"""
name: str
place: str
no: int
BRANCH: TypedBranch = TypedBranch(
"Akihabara",
"東京",
100,
)
print(f"{INIT_PATH=}") # ./users/
print(f"{MAX_ROW=}") # 100000000
print(f"{PLACE_NAMES=}") # 東京 大阪
print(f"{PERSON_001['name']=}") # Yamada Taro
print(f"{BRANCH.name=}") # Akihabara
# 型チェックでreportGeneralTypeIssuesになるが代入はできる
INIT_PATH = "aaaa"
MAX_ROW = 9_999
PLACE_NAMES = ('名古屋', '神戸')
# 型チェックでreportGeneralTypeIssuesにならず代入ができる
# TypedDictは型チェックにも引っかからないので定数としては使えない
PERSON_001['name'] = "Sato Jiro"
print(f"{INIT_PATH=}") # aaaa
print(f"{MAX_ROW=:,}") # 9,999
print(f"{PLACE_NAMES=}") # 名古屋 神戸
print(f"{PERSON_001['name']=}") # Sato Jiro
# 型チェックでreportGeneralTypeIssuesになり
# 実行時にAttributeError: can't set attributeにもなり代入できない
BRANCH.name = 'Ueno'
print(f"{BRANCH.name=}")
※NamedTupleはあくまでtupleなので同じ値が同じ並びにあるもの同士は同じものと判断されるので丸ごとの比較には使用できない