PEP 591 で議論され Python 3.8 から追加されていたようです。
変数
◯ 初期化しないとエラー
from typing import Final
var: Final[int]
# sample.py:3: error: Final name must be initialized with a value
◯ 変更しようとするとエラー
from typing import Final
var: Final[int] = 0
var = 1
# sample.py:4: error: Cannot assign to final name "var"
属性
◯ 初期化しないとエラー
from typing import Final
class Class:
attr: Final[int]
# sample.py:4: error: Final name must be initialized with a value
◯ 変更しようとするとエラー
from typing import Final
class Class:
attr: Final[int]
def __init__(self, attr):
self.attr = attr
obj = Class(0)
obj.attr = 1
# sample.py:11: error: Cannot assign to final attribute "attr"