【发布时间】:2019-03-02 15:00:27
【问题描述】:
我想在模块中导入仅属于特定类型的对象。
例如要导入的模块是:
# foo.py
a = A() # type(a) = A
b = B() # type(b) = B
现在我想从foo(即a)导入A类型的元素。
显然,您可以导入所有foo,然后遍历它以检查类型。不过,我认为这并不理想。
也许importlib 中有一些东西可以促进这一点?
编辑
(添加有关用例的更多信息。)
基本上,我正在尝试创建类似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。他们只是通过其他地方的路径。
完全避免这种导入的替代设计是受欢迎的。
【问题讨论】:
-
Python 中没有这种类型的东西。并且有充分的理由。您尝试这样做的事实表明您的设计可能有问题(尽管由于信息有限,我不能说更多)
标签: python types import python-import python-importlib