краткий способ импорта многих модулей с общими префиксами пространства имен


Я часто обнаруживаю, что импортирую классы из модулей, которые отличаются только в последней части своего пространства имен, например:

from a.b.c.d import Class1
from a.b.c.e import Class2
from a.b.c.f import Class3

Есть ли какой-нибудь способ для меня ввести общую часть a.b.c. только один раз?

Я знаю, что если бы все они имели точно такое же пространство имен, то есть

from a.b.c import Class1
from a.b.c import Class2
from a.b.c import Class3

Тогда я мог бы просто ввести

from a.b.c import (Class1, Class2, Class3)

Итак, для моего первого примера я попробовал такие вещи, как

from a.b.c import (d.Class1 as Class1, 
                   e.Class2 as Class2, 
                   f.Class3 as Class3)

... но это не сработало.

Любые советы будут очень признательны.

2 3

2 ответа:

Если a является одним из ваших собственных пакетов (или если вы хотите и можете поддерживать вилку...) вы можете использовать пакет a.b.c в качестве фасада:

# a/b/c/__init__.py
from d import Class1
from e import Class2
from f import Class3

Затем:

# client code:
from a.b.c import Class1, Class2, Class3

Будет работать.

Нет, нет синтаксиса для импорта вложенных элементов в виде локальных имен.

Вы можете импортировать различные модули, а затем присвоить им локальные имена:

from a.b.c import d, e, f
Class1, Class2, Class3 = d.Class1, e.Class2, f.Class3
del d, e, f
Но это не более читабельно и лаконично.