繁体   English   中英

如何在 Python 中列出导入的类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM