簡體   English   中英

從對象打印Python __str__

[英]Printing Python __str__ from an object

我實際上已經完成了該練習(幾乎),但是只是陷入了對象內部__str__一個小問題。 如果我這樣做

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

然后,它將僅打印出列表中第一個對象的詳細信息(其中只有2個對象),例如sworm = [crit,crit1]

當我嘗試這個

elif choice == "9":
    try:
        print(sworm)
    except TypeError:
        None

然后我得到:

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

提前致謝。

如果您需要__str__方法起作用,那么您應該從中返回一個字符串-像這樣

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

請在這里閱讀文檔

Python列表始終將內容顯示為表示形式,並在對象上調用repr()

您也可以通過指定__repr__方法來加入。 或者,不要直接打印列表,而只打印內容:

for elem in sworm:
    print(elem)

或將它們作為長字符串加入:

print(', '.join(map(str, sworm)))

但是,請確保您確實從__str__方法返回了一個值:

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

因為它是由print()返回值

問題是這樣的:

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

可見,__str__方法實際上不應打印任何內容。 相反,它應該返回要打印的內容。 因此,您需要這樣做:

    return "Critter object\n\n" + self.name + '\n' + self.hunger + '\n' + self.boredom

另外,如果您不想對str屬性進行硬編碼,則可以這樣做

def __str__(self):
    return ', '.join(['{key}={value}'.format(key=key, value=self.__dict__.get(key)) for key in self.__dict__])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM