Разница между прямым доступом к атрибуту и использованием getattr () должна быть незначительной. Вы можете определить разницу между байт-кодами двух версий, используя модуль Python dis
для сравнения двух подходов:
>>> import dis
>>> dis.dis(lambda x: x.foo)
1 0 LOAD_FAST 0 (x)
3 LOAD_ATTR 0 (foo)
6 RETURN_VALUE
>>> dis.dis(lambda x: getattr(x, 'foo'))
1 0 LOAD_GLOBAL 0 (getattr)
3 LOAD_FAST 0 (x)
6 LOAD_CONST 0 ('foo')
9 CALL_FUNCTION 2
12 RETURN_VALUE
Однако, похоже, что вы разрабатываете оболочку, очень похожую на то, как cmd
библиотека Python делает оболочки командной строки. cmd
позволяет создавать оболочки, которые выполняют команды, сопоставляя имя команды с функцией, определенной для объекта cmd.Cmd
, например:
import cmd
class EchoCmd(cmd.Cmd):
"""Simple command processor example."""
def do_echo(self, line):
print line
def do_EOF(self, line):
return True
if __name__ == '__main__':
EchoCmd().cmdloop()
Подробнее о модуле можно прочитать в документации или по адресу http://www.doughellmann.com/PyMOTW/cmd/index.html