Я хочу импортировать в модуль объекты только определенных типов.
Например, импортируемый модуль:
# foo.py
a = A() # type(a) = A
b = B() # type(b) = B
Теперь я хочу импортировать элементы типа A
из foo
(т.е. a
).
Очевидно, вы можете импортировать все foo
, а затем просмотреть их, чтобы проверить типы. Хотя я не думаю, что это идеально.
Возможно, в importlib
есть что-то, что может этому способствовать?
Редактировать
(Добавление дополнительной информации о варианте использования.)
По сути, я пытаюсь создать что-то вроде магии IPython и хочу создать объект для пользовательской магии.
Пользователь будет регистрировать функции в файле с помощью декоратора, который будет возвращать экземпляр определенного типа.
Затем пользователь передаст путь к модулю при создании экземпляра.
# 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
. Они просто проходят по пути где-то еще.
Приветствуются альтернативные конструкции, полностью избегающие такого рода импорта.