Я хочу импортировать объекты в модуле только определенных типов.
Например, импортируемый модуль:
# foo.py
a = A() # type(a) = A
b = B() # type(b) = B
Теперь я хочу импортировать элементывведите A
из foo
(то есть a
).
Очевидно, что вы можете импортировать все foo
, а затем выполнить итерацию по ним для проверки типов.Но я не думаю, что это идеально.
Возможно, в importlib
есть что-то, что может облегчить это?
Редактировать
(Добавление дополнительной информации об использованииcase.)
По сути, я пытаюсь создать что-то вроде IPython magics и хочу создать объект для настраиваемой магии.
Пользователь собирается зарегистрировать функциив файле с декоратором, который будет возвращать экземпляр определенного типа.
Затем пользователь передаст путь модуля при создании экземпляра.
# user_file.py
# decorator returns object of particular type (e.g. `foo`)
@register
def a():
...
def b():
...
Затем происходит нечто подобное:
# importing_file.py
class GetsRegisteredKeys:
def __init__(self, paths:list):
for path in paths:
# import the elements that were registered, i.e. that have `foo` type.
grk = GetsRegisteredKeys(paths=['./user_file.py'])
Пользователь на самом деле не будет звонить GetsRegisteredKeys
.Они просто проходят путь где-то еще.
Альтернативные проекты, которые вообще избегают такого рода импорта, приветствуются.