私はテキストアドベンチャーに取り組んでいます。部屋のクラスとアイテムのクラスがありますが、部屋の中に複数のアイテムを置くと問題が発生します。コードの例を次に示します。
class Place(object):
"""The Room class"""
def __init__(self, name, Item):
self.name = name
self.Item = Item
class Item():
"""The Item class"""
def __init__(self, name):
self.name = name
PC = Item("PC")
Bed = Item("Bed")
bedroom = Place(name = "Bedroom", Item = {PC, Bed})
print (bedroom.Item.name)
そしてエラーメッセージ:
Traceback (most recent call last):
File "C:\Documents and Settings\Kenneth\My Documents\Python_Projects\projects\
TA.Project\location\classes2.py", line 18, in <module>
print (bedroom.Item.name)
AttributeError: 'set' object has no attribute 'name'
Press any key to continue . . .
これはアイテムが 1 つしかない場合に機能しますが、さらに追加しようとするとエラーが発生します。一度に 1 つの項目を表示する for ループを作成しようとしましたが、それも機能しませんでした。どんな助けでも大歓迎です。ありがとうございました。
私が試したループは、次のようなものでした。
for i in bedroom.Item:
print (i)
Attributeerror 'Place' オブジェクトに属性 'Item' がありません
回答は受け入れられます。同様の問題を抱えている他の人のためにコードを更新したいと思います。
class Place:
def __init__(self, name: str, items: set):
self.name = name
if items is None:
items = set()
self.items = items
def get_item_names(self):
# one-liner: return [x.name for x in self.items]
names = []
for item in self.items:
names.append(item.name)
return '\n'.join(names)
def get_item_value(self):
value = []
for item in self.items:
value.append(item.value)
return value
class Item:
def __init__(self, name: str, value: iter):
self.name = name
self.value = value
Bed=Item("Bed", 200)
Chair=Item("Chair", 10)
Oven=Item("Oven", 500)
bedroom = Place("Bedroom", {Bed, Chair})
kitchen = Place("Kitchen", {Oven})
print (bedroom.get_item_names)
値関数は、Item クラスがまだ機能していることを証明するためのものでした。