Python 如何解密0x1097ba828处的[<;\uuuu main\uuuuu.Food对象>;

Python 如何解密0x1097ba828处的[<;\uuuu main\uuuuu.Food对象>;,python,python-3.x,Python,Python 3.x,我是python新手。我想显示实际的名称、值和卡路里而不是[,]我知道这个问题很简单,但如果你能告诉我答案,那将是一个很大的帮助 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 getC

我是python新手。我想显示实际的
名称、值和卡路里
而不是
[,]
我知道这个问题很简单,但如果你能告诉我答案,那将是一个很大的帮助

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())
类食品(对象):
定义初始值(self,n,v,w):
self.name=n
自我价值=v
自身热量=w
def getValue(自身):
回归自我价值
def getCal(自我):
返回自己的卡路里
def密度(自身):
返回self.getValue()/self.getCal()
定义(自我):

return'我做了两个代码更改以获得我认为您需要的内容。第一个是在str函数中将值转换为字符串。第二个是使用它

def __str__(self):
    return '<__main__.Food: '+ str(self.name) +' '+ str(self.value)+' ' + str(self.calories)
现在输出为:


我就是这样做的,注意到我们已经创建了两个类:一个单独的
Food
Menu
类。
Menu
类有一个
add
方法附加到它的
foodItems
属性,尽管我觉得这不是真的必要,因为我们可以直接进行属性分配:

m.foodItems = < some list of Food objects >
和输出,如:


您遇到的问题是,您正在打印
食品
实例的列表,而不是一次打印一个实例。
列表
类型的
\uu str\uuuuuu
操作符对列表包含的项目调用
repr
,而不是
str
,因此您的
\uu str uuuuuuu
方法不会运行

一个简单的修复方法是将
\uuuu str\uuu
方法重命名为
\uuu repr\uu

我要指出的是,有点奇怪的是,您正在构建一个包含
名称
卡路里
值列表的
食品
实例,这样您就可以调用该实例上的一个方法来创建一个包含单个值的
食品
实例的列表。一种更为Pythoic的方法是将列表传递给ode>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))

尝试定义
\uuuuu repr\uuuuuu
。将您的
\uuuu str\uuuuuu
重命名为
\uuuuuuu repr\uuuuu
,并根据
\uuuuuu repr\uuuu
定义
\uuuuuuu str uuuuuuuuuu
。我认为您运行显示的代码可能是重复的,因为
len(值)
应该抛出一个错误可能您还应该有一个菜单类,它与您的食物类是分开的。我认为将buildMenu函数作为单个食物对象的一部分是没有意义的。它不清楚(从答案的差异可以看出)添加输出值或勾选一个可接受的答案将清除这一问题。
@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))