homework confusion
Lauren Fugate
lauren.sophia1998 at gmail.com
Wed Apr 12 22:13:19 EDT 2017
Hello! So I have a homework assignment that I can't seem to understand. The problems are talking about classes and subclasses. My issue is that the examples use objects as arguments and I don't know how to make that happen without getting a name error. The question is:
Create a subclass of Openable called Lockable for representing physical objects that can be unlocked and opened. Remember to make sure that Lockable is a subclass of Openable. In addition to the methods and attributes it automatically inherits from Openable and Thing, it should have:
A public boolean attribute called is_locked that represents whether or not the object is locked.
A public attribute called key which is a Thing object that represents the item that can be used as akey to unlock the Lockable object.
An overridden constructor that takes two strings (the name and the location), a Thing (the key), and two optional boolean values (first, whether the object starts off open and second, whether it starts out locked). If neither of the optional boolean values are given, then the object should default to being closed but not locked. If only the first of the optional arguments (the starting "openness" state) is given, then the object should start out unlocked.
Your version of .__init__() for Lockable must use the version of .__init__() from the superclass Openable to handle the name, location, and "openness" state. Setting the is_locked and key attributes are the only ones you need to handle separately.
So you should be able to create Lockable objects with commands* like Lockable("front door", "in the foyer", house_key, False, True) (returning an object that starts out closed and locked), or Lockable("diary", "under Sam's bed", tiny_key, True) (returning an object that starts out open and unlocked), or Lockable("ancient treasure chest", "at the bottom of the sea", rusty_key) (returning an object that starts out closed and unlocked).
*Assuming that the variables house_key, tiny_key, and rusty_key already exist and refer to instances of Things.
My code is:
class Thing:
"""represents physical objects in a game
attributes: name(str), location(str)"""
def __init__(self, name, location):
"""creates a Thing with a name and location
str, str"""
self.name = name
self.location = location
def __repr__(self):
"""returns the Thing as a string that could be used to create a Thing
None-> str"""
return "Thing(" + self.name + ", " + self.location + ")"
def description(self):
"""returnd the Thing along with its name and location in a string
None -> str"""
return "The " + repr(self.name) + " is " + repr(self.location) + "."
class Openable(Thing):
"""representing the Things that can be opened
attributes: name(str), location(str), is_open(str)"""
def __init__(self, name, location, is_open = False):
"""creates a Thing with a name and location
str, str"""
Thing.__init__(self, name, location)
self.is_open = is_open
def __repr__(self):
"""returns the Thing as a string that could be used to create an Openable
None-> str"""
return "Openable('" + self.name + "', '" + self.location + "', '" + str(self.is_open) + "')"
def description(self):
"""returnd the Thing along with its name and location and whether it is open in a string
None -> str"""
if self.is_open == True:
opened = "is open"
else:
opened = "is closed"
return "The " + self.name + self.location + " is " + opened + "."
def try_open(self):
"""tries to open the Openable and returns the result
None -> bool"""
if self.is_open == True:
return False
if self.is_open == False:
self.is_open = True
return True
class Lockable(Openable):
"""respresents the Openable Things that are Lockable
attributes: name(str), location(str), is_open(str), is_locked(str), key(str)"""
def __init__(self, name, location, key, is_open = False, is_locked = False):
"""creates a Thing with a name and location
str, str"""
Openable.__init__(self, name, location, is_open = False)
self.is_locked = is_locked
def __repr__(self):
"""returns the Thing as a string that could be used to create an Lockable
None-> str"""
return "Lockable('" + self.name + "', '" + self.location + "', '" + str(self.is_open) + "', '" + str(self.is_locked) + "')"
def description(self):
"""returnd the Thing along with its name and location and whether it is open in a string and whether it is locked
None -> str"""
if self.is_open == True:
opened = "is open"
return "The " + self.name + self.location + " is " + opened + "."
elif self.is_open == Flase:
opened = "is closed"
if self.is_locked == True:
locked = "is locked"
return "The " + self.name + self.location + " is " + locked + "."
else:
locked = "is unlocked"
return "The " + self.name + self.location + " is " + opened + " but " + locked + "."
The example command is: Lockable("diary", "under Sam's bed", tiny_key, True)
And I keep getting a NameError: tiny_key is not defined.
What do I do?
More information about the Python-list
mailing list