<p>如果不知道将向函数传递多少个参数,则只应使用<code>*args</code>。在</p>
<p>在您的例子中,看起来您需要所有<code>president, alive, terms, firstelected</code>。拥有一个将所有这些都作为参数的构造函数没有什么错。在</p>
<p>使用<code>*kwargs</code>有几个原因。一种情况是,除非用户希望指定默认值,否则应该使用默认值。在</p>
<p>有关详细信息,请参见<a href="https://stackoverflow.com/questions/3394835/args-and-kwargs">this question</a>、<a href="https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python">this question</a>和<a href="http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments" rel="nofollow noreferrer">official documentation</a>。在</p>
<hr/>
<h3>针对您的评论</h3>
<p>我建议你为每位总统拥有<code>datedied</code>属性。如果它们还没有死,那么值应该是<code>None</code>。当您只使用功能扩展某些实例时,就很难(但并非不可能)对代码进行推理。在</p>
<p>话虽如此,如果您希望每个总统的任意属性显然不适用于每个实例,那么您可以使用关键字参数。但是添加属性并不局限于构造函数。我只想用
<a href="http://docs.python.org/2/library/functions.html#setattr" rel="nofollow noreferrer">setattr()</a>和<a href="http://docs.python.org/2/library/functions.html#hasattr" rel="nofollow noreferrer">getattr()</a>。在</p>
<h3>如何使用kwargs</h3>设置类属性
<pre><code>class President(object):
def __init__(self, *args, **kwargs):
for name, value in kwargs.items():
# Make each keyword-argument a property of the class.
setattr(self, name, value)
tVar = President(is_cool=True)
print tVar.is_cool # Returns True
</code></pre>