我是python新手。我想显示实际值,names,values and calories而不是[<__main__.Food object at 0x1097ba828>, <__main__.Food object at 0x1097ba860>, <__main__.Food object at 0x1097ba898>]我知道这个问题很简单,但是如果您让我知道答案,那将是非常有用的帮助!class Food(object): def __init__(self,n,v,w): self.name = n self.value = v self.calories = w def getValue(self): return self.value def getCal(self): return self.calories def density(self): return self.getValue()/self.getCal() def __str__(self): return '<__main__.Food: '+self.name +' '+ self.value+' ' + self.calories def buildMenu(self): menu = [] for i in range(len(values)): menu.append(Food(self.name[i], self.value[i], self.calories[i])) return menunames=['burger','fries','coke']values=[1,2,3]calories=[100,200,300]if __name__ == '__main__': new = Food(names, values, calories) print(new.buildMenu())谢谢!
3 回答
![?](http://img1.sycdn.imooc.com/545865620001c45402760276-100-100.jpg)
慕容森
TA贡献1853条经验 获得超18个赞
您遇到的问题是您要打印一个Food实例列表,而不是一次打印一个实例。该list类型的__str__运算符调用repr列表中包含的项目,而不是str,因此您的__str__方法不会运行。
一个简单的解决方法是将您的__str__方法重命名为__repr__。
我会注意到,您正在构建一个Food包含name,value和的值列表的实例,这有点奇怪calories,只是您可以在其上调用一个方法以创建Food具有各个值的实例的列表。更为Pythoic的方法是将列表传递给aclassmethod返回实例列表,而无需存在中间实例:
@classmethod
def buildMenu(cls, names, values, calories):
menu = []
for i in range(len(values)): # consider using zip instead of looping over indexes
menu.append(cls(names[i], values[i], calories[i]))
return menu
您可以在课堂上称呼它:
if __name__ == '__main__':
print(Food.buildMenu(names, values, calories))
添加回答
举报
0/150
提交
取消