从obj打印Python

2024-10-01 09:40:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我实际上已经完成了这个练习(几乎),但是我只是被困在一个对象内部的__str__的一个小问题上。如果我这么做

elif choice == "9":
    try:
        for i in sworm:
            print(i)
    except TypeError:
        None` 

然后它将只打印出列表中第一个对象的详细信息(其中只有两个对象),例如--sworm = [crit,crit1]

当我尝试这个的时候

^{pr2}$

然后我获取:-在

[<__main__.Critter object at 0x02B54AD0>, <__main__.Critter object at 0x02B5B190>]

这是我的前半部分

class Critter(object):
    """A virtual pet"""
    def __init__(self, name, hunger = random.randint(1,50), boredom = random.randint(1,50)):
        self.name = name
        self.hunger = hunger
        self.boredom = boredom



    def __pass_time(self):
        self.hunger += 1
        self.boredom += 1

    def __str__(self):

        print ("Critter object\n")
        print (self.name)
        print (self.hunger)
        print (self.boredom)

提前谢谢。在


Tags: 对象nameselfobjectmaindefrandomat
3条回答

Python列表总是将内容显示为表示,在对象上调用repr()。在

您也可以通过指定__repr__方法来钩住它。或者,不要直接打印列表,只打印内容:

for elem in sworm:
    print(elem)

或者把它们连接成一条长串:

^{pr2}$

请确保从__str__方法返回一个值:

def __str__(self):
    return "Critter object\n{}\n{}\n{}".format(self.name, self.hunger, self.boredom)

因为它是由print()打印的返回值。在

如果您需要__str__方法来工作,那么您应该从中返回一个字符串-如下所示

def __str__(self):  
    return 'Critter object: %s %s %s' %(self.name, self.hunger, self.boredom)

请阅读文档here

问题是:

    print ("Critter object\n")
    print (self.name)
    print (self.hunger)
    print (self.boredom)

看,这个方法实际上不应该打印任何东西。相反,它应该返回要打印的内容。所以,你需要这样做:

^{pr2}$

相关问题 更多 >