Skip to main content

定数とパッケージについて

やりたいこと

定数を用意しておいて、他のスクリプトとも共有したいので、
モジュールかパッケージにしたい。

py
LANG_DISPLAY_NAMES = {
'js': 'JavaScript',
'ts': 'TypeScript',
'py': 'Python',
'rb': 'Ruby',
'cpp': 'C++',
}

方法1. モジュール constants.py に入れる

  • 利点: ファイル増えすぎない
  • 不便: dictionary 等でサイズが大きいと、差分が煩雑か
constants.py
LANG_DISPLAY_NAMES = {
...,
}

呼び方:

a.py
import constants
print(constants.LANG_DISPLAY_NAMES['py'])

こうでも良い

a.py
from constants import LANG_DISPLAY_NAMES
print(LANG_DISPLAY_NAMES['py'])

方法2. パッケージ constants に入れる

  • 利点: 変更時の差分が分かりやすい
  • 不便: ファイルが増えすぎる可能性あり
constants/LANG_DISPLAY_NAMES.py
LANG_DISPLAY_NAMES = {
...,
}
constants/__init__.py
from .LANG_DISPLAY_NAMES import LANG_DISPLAY_NAMES

呼び方:

a.py
import constants
print(constants.LANG_DISPLAY_NAMES['py'])

補足. パッケージ案にしたが、細かい定数は1ファイルにしておきたい

constants/common.py
KEY1 = 'aaa'
KEY2 = 'bbb'
KEY3 = 'ccc'
constants/__init__.py
from .common import *

呼びかた:

constants.KEY3 と呼びたい場合

a.py
import constants
print(constants.KEY3)

constants.common.KEY3 のように呼びたい場合は、__init__.py への記載は不要

a.py
import constants
print(constants.common.KEY3)