趣味のPython・深層学習

中級者のための実装集

Attrdict : Pythonの辞書の値を属性アクセス

PythonのAttrDict: 辞書の属性アクセス

本記事では、Pythonでよく使われるデータ構造の一つである辞書(Dictionary)を、AttrDictクラスを使用することで属性アクセスを可能にする解説をします。AttrDictは辞書を拡張し、属性アクセスを提供することで、コードの可読性や使いやすさを向上させるための便利なツールです。(ライブラリもありますが、わかりやすくクラスを実装します。

AttrDictのメリット

  • 属性アクセスの利便性: AttrDictを使用すると、辞書のようにキーを使って値にアクセスするだけでなく、ドット演算子を使って属性としてもアクセスできます。これにより、コードが簡潔で読みやすくなります。

  • コードの可読性向上: 属性アクセスにより、コード内での変数や設定の使用がより直感的になります。これにより、コードが他の人にとっても理解しやすくなります。

  • 補完とドキュメンテーションのサポート: IDEが属性アクセスをサポートするため、補完やドキュメンテーションがより効果的に利用できます。これは開発プロセスを効率化します。

使い方

class AttrDict:
    """
    辞書を受け取り、属性アクセス可能なオブジェクトに変換するクラスです。
    """

    def __init__(self, dictionary: dict):
        for key, value in dictionary.items():
            setattr(self, key, value)

# 使用例
my_dict = {'name': 'John', 'age': 30, 'city': 'Tokyo'}
my_attr_dict = AttrDict(my_dict)

# 辞書と同様にキーでアクセス
print(my_dict['name'])  # 出力: John

# 属性アクセスが可能
print(my_attr_dict.name)  # 出力: John
print(my_attr_dict.age)   # 出力: 30
print(my_attr_dict.city)  # 出力: Tokyo

jsonファイル読み込みへの利用

from typing import Any, Dict
import json

def get_config(file_path: str) -> Any:
    """
    指定されたファイルパスから設定を読み込み、JSONの辞書変数をオブジェクト変数に変換する関数です。

    Parameters:
    - file_path (str): 設定ファイルのパス。

    Returns:
    - Any: 設定を含むオブジェクト変数。
    """

    # 設定ファイルのパスを指定
    config_file: str = file_path  # "./weights/bert_config.json"

    # ファイルを開いてJSONとして読み込む
    with open(config_file, 'r') as json_file:
        json_object: Dict[str, Any] = json.load(json_file)

    # 辞書変数をオブジェクト変数に変換
    config: Any = AttrDict(json_object)

    return config