[英]How do I make a list of imported classes in Python?
from module import a, b, c
foo(a)
foo(b)
foo(c)
有没有办法避免为每个导入的 object 调用foo(x)
?
一些上下文:a,b,c 是网页类,而 foo 是一个 route() function,它为每个网页创建一个路由。
更新:随着应用程序的增长,主模块中的导入类列表将不断增加。 我提到了a、b和c只是作为一个例子。 我正在寻找类似import a, b, c to classes_list
的东西,然后我可以遍历classes_list
而不是在每个导入的类上调用 foo 。
from module import a, b, c
基本上已经是
import module
for x in ['a', 'c', 'c']:
globals()[x] = getattr(module, x)
您可以在注入全局命名空间的值周围插入自己的包装器。
import module
for x in ['a', 'b', 'c']:
globals()[x] = foo(getattr(module, x))
# foo(getattr(module, x)) # If you don't actually need the global name
对于多个模块,您可以定义一个将模块名称映射到 class 名称的字典,并使用importlib.import_module
而不是import
语句来进行实际导入。
from importlib import import_module
classes = {'a': 'A', 'b': 'B'}
for m, c in classes.items():
globals()[c] = getattr(import_module(m), c)
假设您没有其他导入,您可以遍历 globals().items() 以收集所有类。 如果您的整体导入中有其他类,您可能需要进一步过滤。
import inspect
from pandas import DataFrame, Grouper, ExcelFile
imps = globals().items()
filtered_imps = [x[1] for x in imps if inspect.isclass(x[1])]
print(filtered_imps)
产生:
[<class '_frozen_importlib.BuiltinImporter'>, <class 'pandas.core.frame.DataFrame'>, <class 'pandas.core.groupby.grouper.Grouper'>, <class 'pandas.io.excel._base.ExcelFile'>]
然后,您可以根据需要在循环中或作为理解的一部分对列表进行foo()
,也许使用try... except
处理途中的异常。
您可以将导入添加到列表中,然后使用 for 循环:
import_list = [a,b,c]
for x in import_list:
foo(x)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.