Python | 変数を定数として扱う方法

2023-02-13Python 変数,Python

Python | 変数を定数として扱う方法

Pythonの変数を定数として扱う方法とサンプルコードを紹介しています。

確認環境

Windows11 ローカル
Python python-3.11.1

変数を定数として表現する

Pythonでには定数という概念がないため、全て「大文字」と「_」で名付けていても定数ではなくプログラム上は変数として扱われます。

ただ、人が認識する上で値の変更を許可していないという意味で、変数名を全て「大文字」と「_」で名付ける傾向はあります。

MAIN_KEY = 'ABCDE'
MAIN_KEY = '12345'

# 変数として扱われるため、エラーも出ないし変数の値は上書きされます。

変数の値を定数として固定する

モジュール「const.py」を作成して定数のように値を固定して処理する方法もあるようです。

当方、処理がイマイチ上手くいかなかったのですが、多く紹介されている元の情報は以下のもののようで、コードはそのまま記載しています。

参考:Constant types in Python « Python recipes « ActiveState Code

# const.py
class _const:
	class _ConstTypeError(TypeError):
		pass
	def __repr__(self):
		return "Constant type definitions."
	def __setattr__(self, name, value):
		v = self.__dict__.get(name, value)
		if type(v) is not type(value):
			raise self._ConstTypeError("Can't rebind %s to %s" % (type(v), type(value)))
		self.__dict__[name] = value
	def __del__(self):
		self.__dict__.clear()

import sys
sys.modules[__name__] = _const()

以下のように記述すれば、定数のように扱えるとのこと。

import const

const.MAIN_KEY = 'ABCDE'
const.MAIN_KEY = '12345'

# 定数として扱われるため、エラーが表示される。

データ型であればタブルを使う手も

タプルは不変データ型であり、作成後にデータの追加・削除・変更することはできません。
その変数に対して別の型などに再定義はできてしまいますが、append()メソッドによるデータの追加ややdel文でのデータ削除はできなくなりますので値として定数的に扱う事ができます。

例えば、以下のようなPythonのコードはAttributeError(属性エラー)が発生します。

TUPLE = (a, b, c)
TUPLE.append(d)

# AttributeError: 'tuple' object has no attribute 'append'

Python 変数,Python

Posted by Yousuke.U