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