■ はじめに
Python の 実装で何度か定数を定義する必要があった。 今更ながら、改めて調べてみた。 その結果を、徐々にまとめておく。
目次
【1】Python の 定数 1)サンプル 2)使用上の注意 【2】簡易版:定数用ファイル用意して使う 【3】Readonly な定数クラスを作る
【1】Python の 定数
* Python では、基本的に 定数 はサポートされていない * 慣習的に、大文字とアンダーバー(_)のみで定義
PEP 8 – Style Guide for Python Code
https://peps.python.org/pep-0008/#constants
Constants Constants are usually defined on a module level and written in all capital letters with underscores separating words. Examples include MAX_OVERFLOW and TOTAL.
日本語訳
定数 定数は通常モジュールレベルで定義され アンダースコアで単語を区切り、すべて大文字で記述されます。 例としては、MAX_OVERFLOWやTOTALなどがあります。
1)サンプル
HELLO_WORLD = "Hello world!" PI = 3.14
2)使用上の注意
冒頭で述べた通り、 Pythonは基本的に定数をサポートしていないので... * 値の変更可能 => 下記「【3】Readonly な定数クラスを作る」など の回避策もあるにはあるが、、、
【2】簡易版:定数用ファイル用意して使う
定義元:const.py
CSV_DELIMITER = ","
呼び出し側:demo.py
# Step1: import <ファイル名(拡張子なし)> import const # Step2: <ファイル名(拡張子なし)>.<定数名>で呼び出し print(f"Result = {const.CSV_DELIMITER}")
【2】Readonly な定数クラスを作る
* propertyデコレータを使う => ただ、使う前に new しなければならないのが、、、
constants.py
class Constants(object): @property def CSV_DELIMITER(self): return ","
demo.py
import constants constants = constants.Constants() print(constants.CSV_DELIMITER) # Syntax error constants.CSV_DELIMITER = 'NG' print(constants.CSV_DELIMITER)
参考文献
https://maku77.github.io/python/syntax/const.html
Python定数の一般的な方法と書き換えられない定数を作る方法 - プログラミング独学塾
関連記事
Python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/08/07/231242
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / 文字列操作 ~
https://dk521123.hatenablog.com/entry/2023/10/20/000000
Python ~ 基本編 / 日付・日時あれこれ ~
https://dk521123.hatenablog.com/entry/2022/02/01/000000
Python ~ 基本編 / 正規表現 ~
https://dk521123.hatenablog.com/entry/2019/09/01/000000
Python ~ 基本編 / 正規表現あれこれ ~
https://dk521123.hatenablog.com/entry/2020/10/15/000000
Python ~ 基本編 / map ~
https://dk521123.hatenablog.com/entry/2021/03/29/000000
Python ~ 基本編 / リスト・タプル・辞書・集合 ~
https://dk521123.hatenablog.com/entry/2019/10/12/084943
Python ~ namedtuple / 簡易クラス ~
https://dk521123.hatenablog.com/entry/2020/11/10/134233
Python ~ 基本編 / 制御文 ~
https://dk521123.hatenablog.com/entry/2019/08/25/000330
Python ~ 基本編 / ラムダ lambda ~
https://dk521123.hatenablog.com/entry/2019/09/23/000000
Python ~ JSONあれこれ ~
https://dk521123.hatenablog.com/entry/2022/02/14/000000