如何获取从Python 3中的模块导入的所有类的列表?

2024-05-13 19:55:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个由我从某个文件夹导入的所有类的名称组成的列表

目前我有这样的想法:

from .my_classes import Class1, Class2, Class3
list_of_classes = [Class1.__name__, Class2.__name__, Class3.__name__]

但我想把它转换成一些不那么手工的东西:

from .my_classes import *

# .my_classes is obviously not working
list_of_classes = [cls.__name__ for cls in .my_classes]

如何将.my_classes作为列表获取

.my_classes是具有以下结构的文件夹:

my_classes
|
|--__init__.py
|--some_classes_here.py
|--some_more_classes_here.py

Tags: ofnamefrompyimport文件夹列表my
2条回答

基本上,导入的对象将成为模块的属性。 因此,调用vars()将放置所有参数

如果你把它放在导入之后,你应该会看到它

请注意,如果导入import x as y,您将看到y,而不是x

例如:

import collections
import re
print([x for x in vars() if  not (x.startswith('__') and x.endswith('__'))])
['collections', 're']

您可以使用locals()收集当前命名空间中的名称,然后使用__module__属性检查它们来自哪个模块。这仅适用于类和函数

from .my_classes import *

classes = []
for name, item in locals().copy().items():
    try:
        if item.__module__ == 'my_classes':
            classes.append(item.__name__)
    except AttributeError:
        continue

classes
# returns:
['Class1', 'Class2', 'Class3']

相关问题 更多 >