[英]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.