Warm tip: This article is reproduced from serverfault.com, please click

for loop-如何在Python中列出已导入的类?

(for loop - How do I make a list of imported classes in Python?)

发布于 2020-11-30 20:40:10
from module import a, b, c
foo(a)
foo(b)
foo(c)

有没有一种方法可以避免必须foo(x)为每个导入的对象调用

一些上下文:a,b,c是网页类,而foo是route()函数,该函数为每个网页创建路由。

更新:随着应用程序的增长,主模块中的导入类列表将越来越多。我仅以a,b和c为例。我正在寻找类似的东西import a, b, c to classes_list,然后可以遍历classes_list而不是在每个导入的类上调用foo。

Questioner
multigoodverse
Viewed
0
Ryan Deschamps 2020-12-01 06:39:55

假设没有其他导入,则可以遍历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()根据需要循环或作为理解的一部分来遍历列表,也许使用atry ... except来处理途中的异常。