我想在模块中导入仅属于特定类型的对象。
例如要导入的模块是:
# 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
. 他们只是通过其他地方的路径。
欢迎完全避免这种导入的替代设计。