Имеется модуль, в котором определено несколько классов с одинаковым интерфейсом, но с разными реализациями. Используя dir(ModName), получаем список соотв. имен, в программе есть менюшка, где он отображается. Пользователь выбирает нужное. Далее, через eval создается экземпляр выбранного класса и поехали. Теперь для расширения функциональности можно просто добавить новый класс в модуль.
Вопрос: насколько это все разумно? Может, можно лучше сделать?