Чтобы не повторять from <whatever> import *
25 раз, вам необходим цикл, например:
import sys
def _allimports(modnames)
thismod = sys.modules[__name__]
for modname in modnames:
submodname = '%s.%s' % (thismod, modname)
__import__(submodname)
submod = sys.modules[submodname]
thismod.__dict__.update(submod.__dict__)
_allimports('a b c d e'.split()) # or whatever
Я помещаю осмысленный код в функцию, потому что (а) он всегда лучше [[для производительности и во избежание загрязнения пространства имен модуля]], (б) в этом конкретном случае он также позволяет избежать аварий (например, некоторый подмодуль может определять имя thismod
или modnames
... поэтому важно, чтобы те имена, которые мы используем в цикле, оставались локальными для функции, , а не глобальных переменных модуля, поэтому их нельзя случайно затоптал; -).
Если вы хотите применить тот факт, что модуль с именем modname
имеет только один класс (или другой глобальный) с тем же именем, измените последний оператор цикла на:
setattr(thismod, modname, getattr(submod, modname))