我想在模块中导入只有特定类型的对象。
例如,要导入的模块是:
# foo.py
a = A() # type(a) = A
b = B() # type(b) = B
现在我想从A
(即foo
)中导入类型为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
。他们只是在其他地方经过。
欢迎完全避免这种导入的替代设计。
答案 0 :(得分:-1)
如果要执行此操作,只需将其本身放入函数中,然后这样调用即可 (我认为这是您要尝试执行的操作,如果不行,请纠正我)
def A():
return(a)
def B():
return(b)
然后在其他python文件中做
import foo
a = foo.A()
b = foo.B()
foo显然是它的实际名称的占位符。