所以我创建了自己的基于dict的命名元组类:
class t(dict):
def __getattr__(self, v):
try:
return self[v]
except KeyError:
raise AttributeError("Key " + str(v) + " does not exist.")
def __init__(self, *args, **kwargs):
for source in args:
for i, j in source.items():
self[i] = j
for i, j in kwargs.items():
self[i] = j
>>> thing = t(cow=10, moo='moooooooo')
>>> thing.cow
10
>>> thing.moo
'moooooooo'
Run Code Online (Sandbox Code Playgroud)
使用dict的意义在于我可以使用**splat运算符,以及整个事情可以作为dict的json'd.init中的double for循环是这样的,我可以在反序列化后立即从dict重新构造它.
我唯一缺少的是你可以用元组做的多任务,比如
>>> thing = (1, 3, ('blargh', 'mooo'))
>>> a, b, (c, d) = thing
>>> a
1
>>> b
3
>>> c
'blargh'
>>> d
'mooo'
Run Code Online (Sandbox Code Playgroud)
有什么办法可以用我自己的自定义数据类型获得这种行为吗?是否有任何我可以覆盖的函数或某些我可以继承的类来获取此行为?
kin*_*all 11
是.实施__iter__().
class unpackable_dict(dict):
def __iter__(self):
return (self[key] for key in sorted(self.keys()))
d = unpackable_dict(a=1, b=2)
a, b = d
Run Code Online (Sandbox Code Playgroud)
你通常无法从dict中解压缩值的原因就像你的元组一样,dicts没有定义的顺序.我已经使用了一个生成器表达式来按照键的排序顺序获取项目.不过,您可以考虑使用OrderedDict.
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |