<p>您没有在<code>__init__</code>中分配任何内容。您似乎正在与一些元组进行一系列比较(<code>!=</code>表示<em>不等于</em>);因为<code>self.color</code>还不存在,这将导致您看到的异常。在</p>
<p>赋值是<code>=</code>(而且您确实在<code>for_pies</code>中使用赋值,所以您知道如何使用它):</p>
<pre><code>def __init__(self, color, variety_name, size, place_grown):
self.color = color
self.variety = variety_name
self.size = size
self.place_grown = place_grown
</code></pre>
<p>注意,参数的<em>顺序</em>也需要调整,并且我更正了<code>variety</code>属性的名称以符合您的要求。在</p>
<p>接下来,<code>__str__</code>方法将失败,因为它使用了几个不存在的<code>%</code>格式化程序。只需在任何地方使用<code>%s</code>:</p>
^{pr2}$
<p>换句话说,这些不是属性名的首字母。我还在<code>variety</code>和<code>grown</code>之间添加了一个逗号。在</p>
<p>接下来,您可以直接返回<code>in</code>比较的结果,不需要使用<code>if...else</code>:</p>
<pre><code>def for_pies(self):
return self.variety in ("Granny Smith", "Braeburn", "Golden Delicious")
</code></pre>
<p>注意,这个方法不需要将<code>variety_name</code>作为参数!分配告诉您使用<code>self.variety</code>实例属性。在</p>
<p>完成的课程是:</p>
<pre><code>class Apple:
def __init__(self, color, variety_name, size, place_grown):
self.color = color
self.variety = variety_name
self.size = size
self.place_grown = place_grown
def __str__(self):
return "A %s %s apple of the %s variety, grown in %s " % (
self.size, self.color, self.variety, self.place_grown)
def for_pies(self):
return self.variety in ("Granny Smith", "Braeburn", "Golden Delicious")
</code></pre>