python - 如何获取在顶级 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 中获取当前模块中所有类的列表?)
解决方案
您可以使用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
,您将在列表中获得它。
推荐阅读
- python - 如何在应用程序运行时禁用 Tkinter Combox?
- java - 从 Firebase RTD 获取数据时获取 null
- android - 无法下载 gradle.jar (com.android.tools.build:gradle:4.1.0)
- python - 来自父项目的 Django 中的 URL 模板标记
- java - 带有两个不同子类的 Java 向下转型
- .htaccess - Mod_rewrite 仅适用于某些文件夹名称
- angular - Gitlab CI。LFTP 镜像,无法识别 dist/index.html 上的更改
- jquery - 脚本未在 html 字符串中运行,而这在脚本中
- python - Python读取更新的excel文件
- python - 如果隐藏输入中的外键对象ID发生变化,Django如何引发验证错误