Estoy escribiendo una aplicación (un contenedor de servidor para Minecraft) que deseo hacer extensible con complementos. Tengo un sistema en funcionamiento que funciona, sin embargo, creo que a la larga podría mejorarse.Implementación de un sistema de complemento en Python
La forma en que la tengo ahora, la aplicación llama a un método "get_plugins" en la clase de servidor que, primero importa un archivo llamado pluginutils.py (pluginutils.py define una clase BasePlugin que muestra todos los complementos), y luego recorre cada archivo .py en el directorio cmds, importándolo y verificando si se trata de una subclase de BasePlugin. Si es así, almacena una instancia de este en un diccionario, para el cual la clave es una cmd variable de clase definida en el complemento. Cada vez que la aplicación recibe un comando del servidor, comprueba si se trata de una clave del diccionario y, si es así, ejecuta el método de inicio de la instancia almacenada en el diccionario, a la que pasa los argumentos necesarios tomados del comando.
Mientras esto funciona, siento que esta es una manera descuidada de hacerlo. ¿Existen mejores técnicas para implementar un sistema similar a este? Quiero escribir esto yo mismo (no quiero usar nada como zope.interface) ya que es una experiencia de aprendizaje. Gracias.
Im curious; ** ¿cómo ** comprueba si el complemento tiene una clase BasePlugin subclasificada? – tMC
@tMC Puede usar Class .__ subclasses __() que devuelve una lista de subclases de la clase (BasePlugin). Los controlo contra esa lista. –
Gracias- No sabía eso; ¡eso será muy útil! – tMC