首先,听起来您可能正在重新发明轮子……大多数 Python Web 框架(我所知道的是 CherryPy/TurboGears)已经包含一种根据 URL 的内容将请求分派到特定类的方法,或用户输入。
实际上,您执行此操作的方式没有任何问题,但根据我的经验,它往往表明您的程序中存在某种“缺少抽象”。您基本上是依靠 Python 解释器来存储您可能需要的对象列表,而不是自己存储它。
因此,作为第一步,您可能只想制作一个包含您可能要调用的所有类的字典:
dispatch = {'Foo': Foo, 'Bar': Bar, 'Bizbaz': Bizbaz}
最初,这不会有太大的不同。但是随着您的网络应用程序的增长,您可能会发现几个优点:(a)您不会遇到命名空间冲突,(b)使用globals()您可能会遇到安全问题,攻击者可以在本质上访问您程序中的任何全局符号,如果他们可以找到一种方法将任意classname注入到您的程序中,(c)如果您想要拥有classname除实际确切类名之外的其他内容,使用您自己的字典会更灵活,(d)您可以将dispatch字典替换为如果您发现需要,可以进行数据库访问或类似操作的更灵活的用户定义类。
安全问题对于 Web 应用程序来说尤为突出。globals()[variable]从 web 表单中输入 where只是variable自找麻烦。