<p>可以用<a href="http://docs.python.org/library/collections.html#collections.namedtuple" rel="nofollow">namedtuple</a>很好地实现这一点。例如,可以使用默认值创建名为dtuple的小部件:</p>
<pre><code>>>> from collections import namedtuple
>>> _Widget = namedtuple("Widget", "propertyA propertyB propertyC propertyD propertyE propertyF propertyG propertyH propertyI")
>>> DefaultWidget = _Widget(None, 55, "Default", None, None, None, None, None, None)
>>> DefaultWidget
Widget(propertyA=None, propertyB=55, propertyC='Default', propertyD=None, propertyE=None, propertyF=None, propertyG=None, propertyH=None, propertyI=None)
</code></pre>
<p>然后,您可以使用一个名为Widget的函数初始化属性:</p>
^{pr2}$
<p>然后你可以这样使用它:</p>
<pre><code>>>> Widget("test", propertyE=17)
Widget(propertyA='test', propertyB=55, propertyC='Default', propertyD=None, propertyE=17, propertyF=None, propertyG=None, propertyH=None, propertyI=None)
</code></pre>
<p>请注意,如果您试图省略所需的属性a:</p>
<pre><code>>>> Widget()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Widget() takes exactly 1 argument (0 given)
</code></pre>
<p>或者如果你给了一个不存在的属性:</p>
<pre><code>>>> Widget("test", propertyZ="test2")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in Widget
File "<string>", line 32, in _replace
ValueError: Got unexpected field names: ['propertyZ']
</code></pre>
<p>它处理得很好。我认为使用namedtuple可以消除你使用字典的缺点。在</p>