Я бы сохранял команды в виде списка списков или кортежей, в зависимости от того, думал ли я изменить команды. Обратите внимание, что распаковка аргументов в Python делает очень простой механизм для выполнения этих команд, например ::10000
class Shape(object):
def background(self, color):
print "background:", color
def foreground(self, color):
print "foreground:", color
def rect(self, left, top, right, bottom):
print "rect:", left, top, right, bottom
def execute_commands(self, command_list):
for command in command_list:
if hasattr(self, command[0]):
getattr(self, command[0])(*command[1:])
>>> s = Shape()
>>> c = [('background', 'blue'), ('foreground', 'yellow'), ('rect', 10, 0, 20, 20)]
>>> s.execute_commands(c)
background: blue
foreground: yellow
rect: 10 0 20 20