定义它后,您不能在namedtuple
中添加新字段。唯一的方法是创建一个新模板并创建新的namedtuple
实例。
分析
>>> from collections import namedtuple
>>> result = namedtuple('Result',['x','y'])
>>> result
<class '__main__.Result'>
result
不是一个元组,但它创建的元组的类。
>>> result.x
<property object at 0x02B942A0>
您创建一个新的记录是这样的:
>>> p = result(1, 2)
>>> p
Result(x=1, y=2)
>>> p.x
1
打印在p
值x
。
>>> p.x = 5
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
p.x = 5
AttributeError: can't set attribute
这将引发错误,因为元组是不可改变的。
>>> result.x = 5
>>> result
<class '__main__.Result'>
>>> result._fields
('x', 'y')
>>> p = result(1, 2)
>>> p
Result(x=1, y=2)
这不会改变任何东西。
>>> result.description = 'point'
>>> result
<class '__main__.Result'>
>>> result._fields
('x', 'y')
这也没有改变任何东西。
解决方案
>>> result = namedtuple('Result', ['x','y'])
>>> p = result(1, 2)
>>> p
Result(x=1, y=2)
>>> # I need one more field
>>> result = namedtuple('Result',['x','y','z'])
>>> p1 = result(1, 2, 3)
>>> p1
Result(x=1, y=2, z=3)
>>> p
Result(x=1, y=2)
为什么你不使用字典? dict.keys肯定会添加'字段'。 – omikron 2014-09-02 11:34:55