LoginSignup
0
3

__dict__について

Posted at

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}
0
3
1

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
0
3