Kevin wrote:
I am fooling around with classes and I was trying to create a very
small one player text adventure. I made a class called commands here
it is:
class Commands:
    def __init__(self):
        pass
    def quiting(self):
        sys.exit()
    def look(self):
        print "\nNot working yet!\n"
<snip more methods>

while 1:
    com = Commands()
    a = ['look',
         'get',
         'take',
         'kill',
         'drink',
         'eat',
         'eq',
         'help',
         'quit']
    commandl = raw_input(">>>: ")
    if commandl not in a:
        print "\nI don't understand that command?\n"

I want to beable to type in a command from the list at the prompt and
have it call one of the functions from the class. I was looking for a
shorter way to write it but the only way I can think of is with an if
statment for each command. Is there a better way or shorter way to do
this?

You can use introspection to do this: cmd = getattr(com, commandl) cmd()

In fact you could use introspection to replace the list a:
while 1:
  com = Commands()
  commandl = raw_input(">>>: ")
  if hasattr(com, commandl) and iscallable(getattr(com, commandl)):
    cmd = getattr(com, commandl)
    cmd()
  else:
    print "\nI don't understand that command?\n"

You can read a bit more about getattr() and hasattr() here:
http://docs.python.org/lib/built-in-funcs.html

Kent

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to