首页 > 解决方案 > 如何获取在顶级 python 文件中声明的类

问题描述

有没有一种简单的方法来检索顶级 python 文件中声明的所有类?

例如 :

import inspect                                                                                                          
                                                                                                                                                                                                                                               
class FirstClass:                                                                                                       
    pass                                                                                                                
                                                                                                                         
class SecondClass:                                                                                                      
    pass                                                                                                                
                                                                                                                        
if __name__ == '__main__':                                                                                              
    print(inspect.getmembers(__name__))

我试图打印 FirstClass 和 SecondClass。

如前所示,我尝试使用检查模块但没有成功

我已经尝试使用 dir() 但是在函数内部调用它时它会停止工作。

print(dir())

将产生:['FirstClass', 'SecondClass', ' annotations ', ' builtins ' , ' cached ', ' doc ', ' file ', ' loader ', ' name ', ' package ', ' spec ', 'inspect ']

该列表包含我正在寻找的类。但是,当它在另一个范围内调用时,如函数,结果是不同的。

def getdir():
   print(dir())

它将打印一个空列表

__name__我看过帖子但是当相等时它不能解决问题'__main__'

如何在 Python 中获取当前模块中所有类的列表?如何在 Python 中获取当前模块中所有类的列表?

标签: pythonreflection

解决方案


您可以使用globals()来访问您的模块全局变量,并检查以仅过滤类:

import inspect


class FirstClass:
    pass


class SecondClass:
    pass


if __name__ == "__main__":
    print([obj for obj in globals().values() if inspect.isclass(obj)])

但请注意,import全局变量中的导入,因此,例如,如果您添加from gzip import GzipFile,您将在列表中获得它。


推荐阅读