How to make a dict with access by my_dict.my_key?
本问题已经有最佳答案,请猛点这里访问。
通常,使用
所以我提出了以下解决方案:
1 2 3 4 5 | class ddict(dict): def __init__(self, **kwargs): dict.__init__(self, **kwargs) for (k, v) in kwargs.items(): self.__dict__[k] = v |
您可以将其用作:
1 2 3 | d = ddict(a = 1, b = 2) print(d.a) print(d.b) |
这条路安全吗,还是会在某个时候咬我?是否有内置的方法?
(我为什么要这个?打字容易,看起来比听写或明确定义的类好,但这不应该成为这里的主题,因为这是一个品味和情况的问题。而且它是无可辩驳的。)
一种更好更安全的方法是使用
1 2 3 4 5 6 7 8 | class ddict(dict): def __getattr__(self, item): return self[item] d = ddict() d['a'] = 1 print(d.a) >> 1 |
您还可以重写
1 2 3 4 5 6 7 8 9 10 11 | class ddict(dict): def __getattr__(self, item): return self[item] def __setattr__(self, key, value): self[key] = value d = ddict() d.a = 1 print(d.a) >> 1 |
您可以覆盖
1 2 3 4 5 6 | class ddict(dict): def __getattr__(self, item): return self[item] a=ddict({'a':'12'}) a.a |
将输出
更重要的是,最好使用来自
因此,可以重写使类更清晰:
1 2 3 4 5 | from collections import UserDict class ddict(UserDict): def __getattr__(self, item): return self.data[item] |
但这将在您的
正如@deepspace所指出的,您可能希望覆盖