直接属性访问和使用 getattr() 之间的区别应该可以忽略不计。dis
您可以通过使用 Python 的模块比较两种方法来区分两个版本的字节码:
>>> 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
但是,听起来您正在开发一个与 Python 库cmd
执行命令行 shell 的方式非常相似的 shell。cmd
允许您通过将命令名称与对象上定义的函数相匹配来创建执行命令的 shell,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上阅读有关该模块的更多信息