<这里有几个事情要考虑:</P>
<ol>
<li><p>函数<code>buildItems</code>不是<code>Item</code>类的一部分。这意味着调用<code>Item.buildItems()</code>不起作用。这将给出错误<code>AttributeError: type object 'Item' has no attribute 'buildItems'</code>。您提供的错误消息可能是因为缩进实际上不同</p></li>
<li><p>如果实际将项目转换为字符串,则将调用函数<code>__str__(self)</code>,如下所示:</p>
<pre><code>myitems = buildItems()
print(str(myitems[0])) # results in '<clock, 175.0, 10.0>'
</code></pre></li>
<li><p>但是,您正在调用对象列表的print,在那里<code>__repr__(self)</code>函数将用于为列表中的每个元素生成字符串。因此,您需要如下重写<code>__repr__(self)</code>函数:</p>
<pre><code>class Item(object):
def __init__(self, n, v, w):
self.name = n
self.value = float(v)
self.weight = float(w)
def getName(self):
return self.name
def getValue(self):
return self.value
def getWeight(self):
return self.weight
def __str__(self):
return '<' + self.name + ', ' + str(self.value) + ', '\
+ str(self.weight) + '>'
def __repr__(self):
return str([self.name, self.value,self.weight])
</code></pre></li>
</ol>
<p><strong>编辑:</strong></p>
<p>这将产生您想要的输出。然而,这与@ShadowRanger的评论中提到的<code>__repr__</code>函数背后的意图不一致。通过复制粘贴到终端中实现输出的更好方法如下:</p>
<pre><code>def __repr__(self):
return self.__class__.__name__+ repr((self.name, self.value,self.weight))
</code></pre>
<p>`</p>