Python で動的オブジェクトを作成し、それに属性を追加したいのですが、うまくいきませんでした:
obj = object()
obj.somefield = "somevalue"
AttributeError: 'object' オブジェクトには属性 'somefield' がありません
動作しない理由の詳細については、「オブジェクト」クラスのインスタンスに属性を設定できません。
ベストアンサー1
組み込みはインスタンス化できますが、属性を設定することはできません。(まさにこの目的のために、それができればいいのですが。) これは、属性を保持するためのobject
がないためです。__dict__
私は通常次のようにします:
class Object(object):
pass
obj = Object()
obj.somefield = "somevalue"
ただし、Object
クラスが保持するデータに応じて、より意味のある名前を付けることを検討してください。
dict
もう 1 つの可能性は、キーを取得するための属性アクセスを許可する のサブクラスを使用することです。
class AttrDict(dict):
def __getattr__(self, key):
return self[key]
def __setattr__(self, key, value):
self[key] = value
obj = AttrDict()
obj.somefield = "somevalue"
辞書を使用してオブジェクト属性をインスタンス化するには:
d = {"a": 1, "b": 2, "c": 3}
for k, v in d.items():
setattr(obj, k, v)