title: Python 3: Name 'Class instance' not defined
body: <p>I've been working on a text-based adventure game and currently I'm working on splitting up one large game script I have into separate modules. </p>
  
  <p>This is the main game module containing the game's logic. Within the <code>main()</code> function I have defined instances of classes </p>
  
  <pre><code>from gameworld import *
  
  
  def main():
  
      player = Player("Jeff", 100)
      bag = Bag([])
      location = Location('introd')
  
      command = '  '
      while command != "":
          command = input('&gt;&gt;&gt; ')
          if command in location.room.exits:
              location.travel(command)
          elif command == 'look':
              location.room_desc()
          elif command == '':
              print('You have to say what it is you want to do!')
              command = '#'
          elif command == 'search':
              location.search_room()
          elif command.split()[0] == 'Take':
              bag.check_take(command.split()[1])
          elif command == 'Inventory':
              bag.check_inv()
          else:
              print('Invalid command')
  
  
  if __name__ == '__main__':
      main()
  </code></pre>
  
  <p>Below is an excerpt from the gameworld module. It includes the functions that I'm having difficulty with. The <code>Location.key_check</code> and <code>Bag.check_take</code> functions.</p>
  
  <pre><code>#gameworld.py
  
  class Room:
  
      def __init__(self, name, description, exits, actions, roominv, roomkey, lock):
          self.name = name
          self.description = description
          self.exits = exits
          self.actions = actions
          self.roominv = roominv
          self.roomkey = roomkey
          self.lock = lock
  
  class Location:
  
      def __init__(self, room):
          self.room = world[room]
  
      def key_check(self, new_room_name):
          if world[new_room_name].lock and world[new_room_name].roomkey not in bag.inventory:
              self.no_key()
          else:
              world[new_room_name].lock = False
              self.set_room(new_room_name)
              self.room_desc()
  class Bag():
  
      def __init__(self, inventory):
          self.inventory = inventory
  
      def add_to_inv(self, key):
          self.inventory.append(location.room.roominv[key])
          del location.room.roominv[key]
  
      def none_here(self, key):
          print("You can't find a", key)
  
      def check_take(self, key):
          if location.room.roominv and key in location.room.roominv:
              self.add_to_inv(key)
              print('you take the', key)
          else:
              self.none_here(key)
  </code></pre>
  
  <p>When I run the game, and attempt to pick up an item, I receive this traceback error:</p>
  
  <pre><code>Traceback (most recent call last):
    File "C:\Users\Daniel\Python 3.6\Scripts\PythonPR\PythonPR\FlubbosModuleTest.py", line 31, in &lt;module&gt;
      main()
    File "C:\Users\Daniel\Python 3.6\Scripts\PythonPR\PythonPR\FlubbosModuleTest.py", line 23, in main
      bag.check_take(command.split()[1])
    File "C:\Users\Daniel\Python 3.6\Scripts\PythonPR\PythonPR\gameworld.py", line 81, in check_take
      if location.room.roominv and key in location.room.roominv:
  NameError: name 'location' is not defined
  </code></pre>
  
  <p>I receive a similar error when attempting to move to a locked room and the <code>key_check</code> method runs. When the code is all contained in the same script, it runs fine with no problem accessing these class instances. </p>