En primer lugar, parece que puede estar reinventando la rueda un poco ... la mayoría de los frameworks web de Python (CherryPy/TurboGears es lo que sé) ya incluyen una forma de enviar solicitudes a clases específicas basadas en los contenidos de la URL, o la entrada del usuario.
No hay nada incorrecto con la forma en que lo haces, realmente, pero en mi experiencia, tiende a indicar algún tipo de "abstracción faltante" en tu programa. Básicamente, confía en el intérprete de Python para almacenar una lista de los objetos que pueda necesitar, en lugar de almacenarla usted mismo.
Por lo tanto, como primer paso, es posible que desee simplemente hacer un diccionario de todas las clases que es posible que desee llamar:
dispatch = {'Foo': Foo, 'Bar': Bar, 'Bizbaz': Bizbaz}
Inicialmente, esto no hará mucha diferencia. Pero a medida que crece su aplicación web, puede encontrar varias ventajas: (a) no se encontrará con conflictos de nombres, (b) usando globals()
puede haber problemas de seguridad donde un atacante puede, en esencia, acceder a cualquier símbolo global en su programa si pueden encontrar una forma de inyectar un classname
arbitrario en su programa, (c) si alguna vez desea que classname
sea algo diferente del nombre de clase exacto real, usar su propio diccionario será más flexible, (d) puede reemplazar el dispatch
diccionario con una clase definida por el usuario más flexible que hace acceso a la base de datos o algo así si encuentra la necesidad.
Los problemas de seguridad son particularmente importantes para una aplicación web. Haciendo globals()[variable]
donde variable
se ingresa desde un formulario web es solo preguntando por el problema.