私のクラス__setitem__を実装してクラスの属性を設定するにはどうすればよいですか?
class Base:
#has no attributes of its own
def __init__(self, params):
for key in params:
if hasattr(self, key):
self[key] = params[key]
def __setitem__(self, key, value):
self[key] = value
class Child(Base):
prop1 = None
prop2 = None
このしかし、self[key] = value
として無限再帰に入るには、再帰的にself.__setitem__
私の目標は、この
params = dict(
prop1 = "one",
prop2 = "two"
)
c = Child(params)
c.prop1 #"one"
c.prop2 #"two"
ようChild()
コンストラクタにAA辞書を渡すことができるようにすることですが呼び出されます子どものように多くの異なるクラスがありますが、フィールドは異なります。 params
はjsonブロブからのdictです。私は、これがあろうと(私は、Pythonに新しいブランド午前)私は私が求めています何を達成するために内部dict
を使用する方法を見てきましたが、それは私の理解されChild
のような異なるクラスのための一般的なポピュとしてBase
を使用したいですドット表記法を使用してメソッドにアクセスすることを防ぎます(これはむしろ避けたい)。
与えられた 'hasattr'の要件は、あなたの提案よりも複雑です。子供の中にはいくつかのクラスレベル属性 'prop1'と' prop2'がありますが、 'field1'と' field2'を初期化しようとしていますが、これらは異なると思われますか? –
クラス属性とインスタンス属性の違いを知っていますか? – martineau
申し訳ありませんが、彼らは "propX"だったはずです。編集した – thedarklord47