<p>首先,这:</p>
<pre><code>class Swoosh():
spam = ''
eggs = ''
swallow = ''
coconut = ''
</code></pre>
<p>设置类</em>属性<code>spam</code>、<code>eggs</code>等。然后,您的set-spam方法可能会继续创建同名的<em>对象</em>属性来隐藏类属性。换句话说,定义这些属性没有效果,只是混淆了一些东西。</p>
<p>如果所有变量都是可选的,我会这样做:</p>
<pre><code>class Swoosh():
def __init__(self, spam="", eggs="", swallow="", coconut=""):
self.spam = spam
self.eggs = eggs
self.swallow = swallow
self.coconut = coconut
</code></pre>
<p>然后可以创建如下对象:</p>
<pre><code>o1 = Swoosh(eggs="Eggs!", coconut="Carried by the husk")
</code></pre>
<p>如果,比如说,垃圾邮件和鸡蛋是强制性的,那么用</p>
<pre><code> def __init__(self, spam, eggs, swallow="", coconut=""):
</code></pre>
<p>不要使用setter和getter。如果以后需要,可以通过向类中添加以下代码来无缝地将常规属性替换为属性:</p>
<pre><code> def get_spam(self):
return self._spam
def set_spam(self, value):
self._spam = " ".join([str(value)] * 5)
spam = property(get_spam, set_spam)
</code></pre>
<p>有了上述变化,这:</p>
<pre><code>o2 = Swoosh(eggs="yes", spam="spam")
print o2.spam
</code></pre>
<p>印刷品</p>
<pre><code>spam spam spam spam spam
</code></pre>
<p><strong>注意:</strong>正如Dave Webb在他的回答中指出的,要使属性工作,您需要子类<code>object</code>,除非您使用python 3.0+,在这种情况下,类隐式地子类<code>object</code>。噢,<em>do</em>跟随Sean Vieira的链接,可以看到<em>Python不是Java</em>文章。这是必读的。</p>