多くのプログラミング言語では、一度値を代入したら再度代入できない定数がサポートされています。いろいろな場面で使うのですが、Pythonでは定数がサポートされておらず、いろいろな手法で対処することになります。いくつかのよく使われている手法について説明していきます。
Pythonの定数が上書きできることの確認
Pythonでは定数がサポートされていないので、簡単に上書きすることができます。実際に標準ライブラリを見て確認してみましょう。ここではmathライブラリの円周率πを保存しているmath.piを上書きしてみます。
サンプルソース
実行結果
実行結果です。定数と思っているものでも、代入によって書き換えられることが分かります。
定数を大文字で記述して分かりやすく定義する
math.pi は小文字で変数定義していますが、慣習としては大文字とアンダーバーを使って書くことで、定数である雰囲気を表す手法がよく使われています。
サンプルソース
サンプルの実装です。こちらもmath.piと同じく上書きは可能ですが、雰囲気は伝わるでしょうか。
実行結果
実行結果です。上書きされていることは分かりますが、大文字で表記すると分かりやすくなることがあります。
Python Cookbookで紹介されている例
これまでは変数を直接大文字で書くことで定数を表現していました。Pythonではクラスや列挙型が利用できるので、場合によってはそれらを使うことでわかりやすいプログラムが書けることがあります。
こちらではPython Cookbookで紹介されている定数を管理するオブジェクトを利用してみましょう。
Python Cookbookベースの実装
python_const_0.py という名前で定数管理用のクラスを容易しました。
サンプルソース
サンプルの実装です。コード中のリンク先も参考にしてください。ここではexit(0)で再代入が起きた場合にはプログラムを終了していますが、例外処理などを挟んでも良いですね。
実行結果
実際に実行すると、再代入が起きたところでプログラムを終了できました。
スポンサーリンク
このようにPythonでは定数が公式にサポートされていないため、いろいろなアプローチがあります。モジュールに定義したり、大文字で記述したり、管理用のクラスを作ったり、自分のプログラムに応じて使ってみてくださいね。