ゲームキャラクターオブジェクトの統計ブロックを印刷しています。__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
文字列に追加できる簡単な追加があると信じたいと思います。