Pythonでは、他の言語のように直接的な定数の概念がありません。しかし、クラス変数を使用して定数のような振る舞いを実現することができます。
クラス変数を定数として使用する
Pythonのクラス変数は、そのクラスのすべてのインスタンス間で共有されます。これを利用して、定数を模倣することができます。
class Author:
NAME: str = "Maku"
AGE: int = 14
print(Author.NAME) # => Maku
print(Author.AGE) # => 14
この方法では、Author.NAME
やAuthor.AGE
は定数のように扱うことができます。しかし、これらの値は再代入可能であるため、厳密な意味での定数とは言えません。
再代入不可能な定数を作成する
Pythonで再代入不可能な定数を作成するためには、少し工夫が必要です。以下に、再代入を防ぐためのクラスを作成する例を示します。
class ConstantError(Exception):
"""Constantクラスの例外"""
pass
class ConstantMeta(type):
"""Constantクラスのメタクラス"""
def __new__(mcls, classname, bases, dict):
# 異なるConstantMetaを継承していないか検証する
...
このように、メタクラスを使用してクラスの振る舞いをカスタマイズすることで、再代入不可能な定数を作成することができます。
以上、Pythonでクラス定数を扱う方法について説明しました。Pythonは他の言語とは異なるアプローチを必要としますが、上記の方法を使用すれば、定数のような振る舞いを実現することができます。.