今日も見に来てくださって、ありがとうございます。石川さんです。
今回は、Pythonプログラムでコンスタント値を扱うのはどうするのかなぁ、と調べていて発見した、Enumを紹介したいと思います。
ソースコード
import enum
class PaperSize(tuple, enum.Enum):
# Paper size
A0 = (841, 1189)
A1 = (594, 841)
A2 = (420, 594)
A3 = (297, 420)
A4 = (210, 297)
A5 = (148, 210)
def __str__(self):
return self.name
このコードを例えばconstants.pyのようなファイルに保存することで、モジュールが作成できます。利用するためには、
from constants import *
のようにすればよいでしょう。
※追記:この、インポートで*を使うのはよく見かけますが、バッドプラクティスだそうです。名前空間を汚染するから、というのがその理由です。なるほど。きちんと名前を指定しましょう。
さて、標準モジュールにあったenum.Enumですが、ちゃんとドキュメントがありました。読んでもイマイチわからないので(笑)、とりあえず使い方ですね。
In [69]: for paper in PaperSize:
...: print(paper)
...:
A0
A1
A2
A3
A4
A5
このように、イテレータとして使うことができます。
In [70]: PaperSize.A0 Out[70]: <PaperSize.A0: (841, 1189)> In [71]: PaperSize.A0[0], PaperSize.A0[1] Out[71]: (841, 1189)
また、A0、A1といった、それぞれの要素を直接参照することができます。
In [72]: for paper in PaperSize:
...: print(paper.name, paper.value)
...:
A0 (841, 1189)
A1 (594, 841)
A2 (420, 594)
A3 (297, 420)
A4 (210, 297)
A5 (148, 210)
このように「name」「value」といった属性が利用できます。
まとめ
このような、複数の値を保持する必要がある場合は、enumモジュールのEnumを利用できるかも知れませんね。

