3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

設定ファイルを.ini等でなくPythonで書いて与える形の試行

Last updated at Posted at 2020-12-30

設定ファイルを.ini等でなく、設定ファイルもPythonで書いて与える形を試行してみます。

Pythonで書いて与える設定ファイルは、「config(cfg)」関数の中に設定を書いて、「cfg」オブジェクトに設定値を代入することにすると、以下「trial-config1.py」のようなもの(例)。

関数の戻り値や、場合分けして設定可能。別の設定ファイルを読み込んで上書き(ネスト)も可能。

trial-config1.py (設定ファイル)

# -*- coding: utf-8 -*-

# pyによる設定ファイル

import socket

# sec: config

def config(cfg):
    
    # sec: cfgに設定値を代入する形
    
    cfg.setting1 = True
    
    # sec: 関数戻り値を設定可
    
    cfg.name = socket.gethostname() # ホスト名 (★関数戻り値を設定可)
    cfg.ip = socket.gethostbyname(cfg.name) # IPアドレス
    
    # sec: 場合分けして設定可
    
    if "PC" in cfg.name: # (★場合分けして設定可)
        cfg.setting2 = True
    
    # sec: 階層的に設定可
    
    cfg.setting3 = cfg.__class__() # (★階層的に設定可)
    cfg.setting3.setting1 = True
    
    # sec: 設定ファイルのネスト可
    
    __import__("trial-config2").config(cfg) # (★設定ファイルのネスト可) 

別の設定ファイルも、「config(cfg)」関数と「cfg」オブジェクトを使う形にして、以下「trial-config2.py」のようなもの(例)。

trial-config2.py (設定ファイル)

# -*- coding: utf-8 -*-

# pyによる設定ファイル

# sec: config

def config(cfg):
    
    # sec: 元の設定値を上書き
    
    cfg.name += " + 上書き"
    cfg.ip += " + 上書き"
    
    # sec: 新しい設定値を代入
    
    cfg.setting11 = True

「trial-config1.py」と「trial-config2.py」は、以下のように置く時、

ファイル構造

アプリ側スクリプト.py
trial-config/
  trial-config1.py (設定ファイル)
  trial-config2.py (設定ファイル)

アプリ側で、前記のPythonで書いた設定ファイルを読み込んで利用するには、「import("trial-config1").config(cfg)」等で読み込み、「cfg」の中の各値を用いる形にして、以下コード。

アプリ側スクリプト.py

# -*- coding: utf-8 -*-

# pyで設定定義ファイルを構成・ネストする方法

import sys

# sec: main

def main():
    
    # sec: 格納クラス
    
    class Config: pass
    cfg = Config()
    
    # sec: 読込
    
    sys.path.append(r"./trial-config/")
    __import__("trial-config1").config(cfg)
    del sys.path[-1]
    
    # sec: 結果表示
    
    for key, val in cfg.__dict__.items():
        print(f"{key}: {val}")

"""コンソール出力例:
setting1: True
name: PC1 + 上書き
ip: 192.168.0.1 + 上書き
setting2: True
setting3: <__main__.trail__py_config_file.<locals>.Config object at 0x0>
setting11: True
"""

# sec: entry

if __name__ == "__main__": main()

「cfg」内の設定値が全てコンソールに表示されます。アプリ側では「cfg.setting1」のようにして、設定値を利用可に。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?