[Tutor] 'str' object has no attribute 'description'
Russell Shackleton
rshack at xtra.co.nz
Sun Dec 18 23:06:38 CET 2011
I am learning Python classes by writing an adventure game. I have extracted just the relevant code. The player can look, go, drop, take, inventory but not examine.
Python produces the error message in the Player class, examine function, in the first print statement.
How do I fix this code, please?
class Player(object):
"""The player in the game."""
def __init__(self, name, currentRoom=None):
self.name = name
self.currentRoom = currentRoom
self.items = [] # items taken by Player
def look(self):
"""Prints the room description, exits and items in the current room."""
print self.currentRoom
def go(self, direction):
"""Go to another room through an exit."""
def drop(self, item):
"""Drop an item you are carrying in the current room."""
def take(self, item):
"""Take (pick up) an item from the current room."""
if item == self.currentRoom.item:
self.items.append(item)
print self.currentRoom.item + " added to player's inventory..\n"
# remove item from currentRoom
self.currentRoom.item = ''
else:
print "There is no " + item + " here to take!\n"
def inventory(self):
"""Prints list of items the player is carrying."""
def examine(self, item):
"""Prints description of item."""
if item in self.items:
# Error: 'str' object has no attribute 'description'
print "Item Description: " + item.description + ".\n"
else:
print "You are not holding the " + item + " to examine!\n"
class Item(object):
"""A useful item in the game."""
def __init__(self, name, description, location):
self.name = name
self.description = description
self.location = location
def __str__(self):
"""Description of item."""
return self.description
class Game(object):
"""The adventure game."""
def __init__(self, name, player):
self.name = name
self.player = player
print "Welcome to " + self..name + "\n"
print player.currentRoom
def play(self, character):
"""Command loop for game."""
while True: # loop forever
commands = raw_input("-> ").lower()
if not commands:
print "Huh?"
else:
try:
cmdlist = commands.split() # separate commands
action = cmdlist[0]
if action == "quit":
print "See you later!"
break
elif action == "look":
elif action == "go":
elif action == "take":
elif action == "drop":
elif action == "examine":
if len(cmdlist) != 2:
print "An examine command must be followed by an item name."
continue
else:
character.examine(cmdlist[1])
elif action == "inventory":
except AttributeError, msg:
print "Error - undefined method: " + str(msg)
def main():
# Room descriptions
room5 = Room(name="hallway", description="You are in a dark hallway.", item="diary")
# Item descriptions
diary = Item(name="diary", description="grey-covered Croxley diary", location=room5)
More information about the Tutor
mailing list