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

我是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())

谢谢!


子衿沉夜
浏览 183回答 3
3回答

慕容森

您遇到的问题是您要打印一个Food实例列表,而不是一次打印一个实例。该list类型的__str__运算符调用repr列表中包含的项目,而不是str,因此您的__str__方法不会运行。一个简单的解决方法是将您的__str__方法重命名为__repr__。我会注意到,您正在构建一个Food包含name,value和的值列表的实例,这有点奇怪calories,只是您可以在其上调用一个方法以创建Food具有各个值的实例的列表。更为Pythoic的方法是将列表传递给aclassmethod返回实例列表,而无需存在中间实例:@classmethoddef buildMenu(cls, names, values, calories):&nbsp; &nbsp; menu = []&nbsp; &nbsp; for i in range(len(values)):&nbsp; &nbsp; &nbsp; &nbsp; # consider using zip instead of looping over indexes&nbsp; &nbsp; &nbsp; &nbsp; menu.append(cls(names[i], values[i], calories[i]))&nbsp; &nbsp; return menu您可以在课堂上称呼它:if __name__ == '__main__':&nbsp; &nbsp; print(Food.buildMenu(names, values, calories))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python