質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

11180閲覧

Pythonアプリケーションで複数のクラスから共通の設定情報を参照したい。

gtracker64

総合スコア49

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/08/27 02:25

編集2016/08/27 03:36

###前提・実現したいこと
アプリケーションの設定を設定ファイルから読み込み、その読み込んだ情報を色んなファイル、クラスから参照したいです。
現在はConfigUtilというクラスを使ってファイルの読み込みをやっており、色んなクラスでこのConfigUtilを呼び出しています。しかし、ConfigUtilを呼び出す度にファイル読み込みが発生してしまいます。
そこでこのファイル読み込み処理をアプリ起動時の一回だけにしたいです。実際この設定ファイルは起動後に変更されることはありません。

どのような実装とするとカッコよくまとまるでしょうか。
例えば呼び出し元のHogeクラスだけでconfigを読み込み、Fugaのコンストラクタにconfigを渡すということも考えましたが、ほかにやり方があれば知りたいと思っています。

あるいはみなさんだとどう実装しますか。

###該当のソースコード
ソースのイメージです。実行チェックしてません。

python

1 2DEFAULT_CONFIG_FILE = "./config.ini" 3class ConfigUtil(): 4 def __init__(self) 5 self.config = ConfigParser.SafeConfigParser() 6 self.config.read(DEFAULT_CONFIG_FILE) 7 8 def getConfig(self) : 9 return self.config() 10 11class Hoge(): 12 param1 = 0 # Hogeクラス内で使う変数 13 def __init__(self): 14 configUtil = ConfigUtil() 15 config = configUtil.getConfig() 16 self.param1 = config.get("hoge","key1") 17 18 def main(self): 19 #TODO 20 my_func1(self.param1) # param1を使う処理 21 fuga = Fuga() 22 fuga.main() 23 24class Fuga(): 25 param2 = 0 # Fugaクラス内で使う変数 26 def __init__(self): 27 configUtil = ConfigUtil() 28 config = configUtil.getConfig() 29 self.param2 = config.get("fuga","key1") 30 31 def main(self): 32 #TODO 33 my_func2(self.param2) # param2を使う処理 34

###補足情報(言語/FW/ツール等のバージョンなど)

  • Python2.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

モジュールにして読み取り専用にする(get関数だけ設ける)、というのはどうでしょう。
(読み取り専用は蛇足?)

何度インポートしても、読み込みは一度だけです。

  • config/__init__.py

lang

1import ConfigParser 2 3DEFAULT_CONFIG_FILE = "./config.ini" 4 5 6class ConfigUtil(): 7 def __init__(self): 8 self.config = ConfigParser.SafeConfigParser() 9 print "config-read" 10 self.config.read(DEFAULT_CONFIG_FILE) 11 12 13_util = ConfigUtil() 14 15 16def get(section, key): 17 return _util.config.get(section, key)
  • main.py
import config print config.get("hoge", "key1")

投稿2016/08/27 03:48

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gtracker64

2016/08/27 04:26

__init__.pyでグローバル変数にConfigUtilを持つというやり方ですね。 回答ありがとうございます。 他のナイスなアイデアも見てみたいので、回答締め切りはもう少し時間をください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問