所以我自己创建了一个基于字典的命名元组类:
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'
使用字典的目的是为了能够使用**扩展运算符,同时整个内容可以作为字典进行JSON序列化。在init中的双重循环是为了在反序列化后立即从字典中重新构建它。
我唯一缺少的就是元组可以进行的多重赋值操作,例如:
>>> thing = (1, 3, ('blargh', 'mooo'))
>>> a, b, (c, d) = thing
>>> a
1
>>> b
3
>>> c
'blargh'
>>> d
'mooo'
我能否用自定义数据类型获得这种行为?有没有可以覆盖的函数或者可以继承的类来实现这种行为?