如何在顶层 python 文件中声明 类

How to get classes declared in the top level python file

是否有一种简单的方法来检索在顶级 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']

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

def getdir():
   print(dir())

它将打印一个空列表

我查看了 post 但是当 __name__ 等于 '__main__'

时它并没有解决问题

如何获取 Python 当前模块中所有 类 的列表?(How can I get a list of all classes within current module in Python?)

您可以使用 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,您将在列表中得到它。