为了账号安全,请及时绑定邮箱和手机立即绑定

如何解密[<__ main__.Food对象位于0x1097ba828>

如何解密[<__ main__.Food对象位于0x1097ba828>

子衿沉夜 2021-04-09 18:19:26
我是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 回答

?
慕容森

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))


查看完整回答
反对 回复 2021-04-20
  • 3 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信