簡體   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