从Python中的_uinit__uuu.py中提取所有类名

从Python中的_uinit__uuu.py中提取所有类名,python,python-3.x,Python,Python 3.x,在我的python项目中,我有下面的目录结构 checks/ __init__.py check_1.py check_2.py main.py init.py文件中的内容如下所示,其中Check1和Check2分别是check_1.py和check_2.py中的类- __init__.py - from .check_1 import Check1 from .check_2 import Check2 main.py中的内容如下- def get_check_class_

在我的python项目中,我有下面的目录结构

checks/
  __init__.py
  check_1.py
  check_2.py
main.py
init.py文件中的内容如下所示,其中Check1和Check2分别是check_1.py和check_2.py中的类-

__init__.py - 

from .check_1 import Check1
from .check_2 import Check2
main.py中的内容如下-

def get_check_class_from_name(check_name: str):
    """
    Checks whether the check is present or not.
    """
    import checks

    checks = dict(
        check_1=checks.CheckDataRelation,
        check_2=checks.CheckDatatype
    )
    try:
        return checks[check_name]
    except KeyError:
        raise ValueError(f"Could not find a check with name '{check_name}'")
在main.py中,正如您所看到的,我正在创建字典并基于检查名称提取检查类名,这不是自明天以来最好的方法,如果必须在init.py中引入新的检查,例如check_3,我将再次在main.py中修改检查字典,如下所示-

checks = dict(
        check_1=checks.CheckDataRelation,
        check_2=checks.CheckDatatype
        check_3 = ?? (this is poor way of hardcoding new checks in this dictionary always)
    )
输出-我想调用函数-通过传递check\u name从\u name获取\u check\u class\u,它应该显示特定检查的类,而不需要硬编码。如前所述,每次我们添加一个检查时,所有这些地方都必须进行修改以获得正确的实现。 这不是编码的最佳实践


Requirement-在Main.py中,我想获取check name的类名,我将其作为参数传递,以从check name中获取check class\u

您的问题是什么?如果只是如何导入init,请尝试在main.py内导入检查您使用的python版本是什么?不要使用所有python版本并将其添加到tags@LCMa我想从init文件中提取所有类名,即Check1和Check2Class@12944qwerty当然,我已经删除了其他版本。我正在使用3.7签出
inspect.getmembers()