我正在为游戏角色对象打印一个统计块。在上一个问题中,我展示了一种在__str__
函数中使用显示对象数据的方法,如下所示:
def __str__(self):
if self.poisoned is True:
status = "[POISONED]"
else:
status = ""
self.status = status
return ('NAME: {name} {status}\n' \
'XP: {xp}\n' \
'HP: {hit_points}\n' \
'SP: {spell_points}\n' \
'STR: {strength}\n' \
'DEX: {dexterity}\n' \
'WEAPON: {weapon}\n' \
'SPELL: {spell}\n' \
'ITEM: {item}\n' \
'AURA: {aura}\n' \
).format(**self.__dict__)
我要解决的问题与 WEAPON、SPELL、ITEM 和 AURA 变量有关。这些项目在 Character 对象中定义为单个项目列表:weapon=[]
等等。使用上述方法返回列表对象,而不是它包含的不带[]
. " "
如果存在且不存在,我会看到一个空白字符串或列表包含的对象[]
。
NAME: Bones
XP: 0
HP: 100
SP: 100
STR: 14
DEX: 19
WEAPON: []
SPELL: []
ITEM: []
AURA: []
我已经尝试了许多实验,包括在定义列表对象为空时哪个不起作用之后替换{weapon}
引用。那只是错误。我可以在对象实例化时生成项目,但这有时会不起作用,因为有时会是一个空列表容器。{current_weapon}
current_weapon = weapon[0]
IndexError: list index out of range
self.item
我可以使用对象传播列表," "
但随后必须将它们与替换项目一起处理并跟踪这似乎非常不优雅且可能很麻烦。
我似乎无法用一种优雅的方式来__str__
按照当前设计的方式在上述返回中打印列表对象。我仍在学习 Python,并希望相信有一个简单的添加可以附加到这个return
字符串中来做到这一点。