Python の Final - 型ヒントで定数と変更できない属性を宣言する。


PEP 591 で議論され Python 3.8 から追加されていたようです。

定数

◯ 変更しようとするとエラー

from typing import Final

a: Final[int] = 0
a = 1
# sample.py:4: error: Cannot assign to final name "a"

属性

◯ 初期化しないとエラー

from typing import Final

class ClsA:
    attr_a: Final[int]
    # sample.py:4: error: Final name must be initialized with a value

◯ 変更しようとするとエラー

from typing import Final

class ClsB:
    attr_b: Final[int]

    def __init__(self, attr_b):
        self.attr_b = attr_b


obj_b = ClsB(0)
obj_b.attr_b = 1
# sample.py:11: error: Cannot assign to final attribute "attr_b"