【Python】Python ~ 定数 ~

■ はじめに

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
PythonJSONあれこれ ~
https://dk521123.hatenablog.com/entry/2022/02/14/000000