我是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 menu
names=['burger','fries','coke']
values=[1,2,3]
calories=[100,200,300]
if __name__ == '__main__':
new = Food(names, values, calories)
print(new.buildMenu())
谢谢!
答案 0 :(得分:1)
我进行了两个代码更改,以获取我认为您要查找的内容。第一种是在 str 函数中将值转换为字符串。第二个就是使用它。
None
None
None
Some(42)
和
def __str__(self):
return '<__main__.Food: '+ str(self.name) +' '+ str(self.value)+' ' + str(self.calories)
现在输出为:
<< strong>主要。食物:['汉堡','薯条','可乐'] [1、2、3] [100、200、300]
答案 1 :(得分:0)
这就是我要这样做的方式,请注意我们已经创建了两个类:单独的Menu
和Menu
类。 add
类具有一个foodItems
方法追加到其m.foodItems = < some list of Food objects >
属性中,尽管我认为这不是真正必要的,因为我们可以直接进行属性分配:
buildMenu
我从Food
类中删除了令人困惑的__str__
方法,并为两个类都定义了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 '\t'.join([self.name, str(self.value), str(self.calories)])
class Menu(object):
def __init__(self):
self.foodItems = []
def add(self, foodItem):
self.foodItems.append(foodItem)
def __str__(self):
"""
prints the food items
"""
s = 'Item\tValue\tCalories\n'
s += '\n'.join(str(f) for f in self.foodItems)
return s
names=['burger','fries','coke']
values=[1,2,3]
calories=[100,200,300]
m = Menu()
items = list(Food(n,v,c) for n,v,c in zip(names,values,calories))
m.foodItems = items
print(m)
方法:
echo $row['rmb4'];
输出类似:
答案 2 :(得分:0)
您遇到的问题是您要打印Food
个实例的列表,而不是一次打印一个实例。 list
类型的__str__
操作符在列表包含的项目上调用repr
,而不是str
,因此您的__str__
方法不会运行。
一个简单的解决方法是将您的__str__
方法重命名为__repr__
。
我注意到,您正在构建一个Food
实例,其中包含name
,value
和calories
的值列表,这有点奇怪。您可以在其上调用一个方法以列出包含各个值的Food
实例。更具Pythoic的方法是将列表传递到返回实例列表的classmethod
,而无需存在中间实例:
@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))