FastAPIを勉強しているとルートハンドラやロガーの定義でよく__dict__を見かけることが増えたので備忘録として記載する。
__dict__とはオブジェクトが持つ属性
とその値を格納する辞書を返す、特殊属性のこと。
モジュール、クラス、インスタンスなどで参照可能。
文字列・リスト・辞書には__dict__属性が無いので参照不可能。
(hasattr()を使えばオブジェクトに__dict__属性があるかないか確認できる)
例えば以下ではMyClassがx,yといった属性を持っている。
class MyClass:
def __init__(self, x, y):
self.x = x
self.y = y
このクラスのインスタンスを作成して__dict__を参照すると、MyClassに定義されたx,yという属性に引数で与えられた値1,2が関連付けられていることが分かる。
obj = MyClass(1, 2)
print(obj.__dict__)
# {'x': 1, 'y': 2}
また__dict__は辞書内の値を追加/更新/削除することも可能。
#追加
obj.__dict__['z'] = 3
print(obj.__dict__)
# {'x': 1, 'y': 2, 'z': 3}
#更新
obj.__dict__['x'] = 4
print(obj.__dict__)
{'x': 4, 'y': 2, 'z': 3}
#削除
del obj.__dict__['x']
print(obj.__dict__)
{'y': 2, 'z': 3}