に私はあなたがそのようにアクセスできる辞書int型を作りたい:上書き{}のpython
>>> my_dict["property'] = 3
>>> my_dict.property
3
だから私はこの1つ作った:
class DictAsMember(dict):
def __getattr__(self, name):
return self[name]
これはうまく動作しますが、場合をあなたはそれが動作しませんdicts、例えば入れ子にしている:
my_dict = DictAsMember()
my_dict["property"] = {'sub': 1}
私はmy_dict.propertyにアクセスできますが、論理的に、私は小道具のでmy_dict.property.subを行うことはできませんertyはデフォルトのdictなので、デフォルトのdictを上書きしたいので、{}を使うことができます。
これは可能ですか?
問題の回避策は__getattr__
方法でそれらを返す前に
DictAsMember
を使用して、デフォルトの辞書をラップしている
唯一の問題は、辞書を持つ配列がある場合です。 my_dict ["properties"] = [{'name':1}、{'name':2}] 回避策を変更して配列を考慮に入れてください。なぜデフォルトディクテーションを上書きする方法を探していたのですか? –
@Félix物事は少し複雑になりますが、リスト内の辞書は引き続きラップできます。私はリスト内の辞書を使って例を示すために答えを更新しました。 – jcollado