Python:检查模块以挑选特定类型的类?

Python:检查模块以挑选特定类型的类?,python,Python,我有一个模块,其中定义了实现我的“策略”的所有类 class Policy_Something(Policy_Base): slug='policy-something' ... class Policy_Something_Else(Policy_Base): slug='policy-something-else' ... 我需要创建从slug到类的映射。比如: slug_to_class = { 'policy-something': Polic

我有一个模块,其中定义了实现我的“策略”的所有类

class Policy_Something(Policy_Base):
    slug='policy-something'
    ...

class Policy_Something_Else(Policy_Base):
    slug='policy-something-else'
    ...
我需要创建从slug到类的映射。比如:

slug_to_class = {
    'policy-something': Policy_Something,
    'policy-something-else': Policy_Something_Else
}
我想通过检查模块并查找从策略库继承的类(类似于unittest查找测试的方式),而不是自动创建slug_to_类

有什么理由我不应该那样做吗?如果没有,我该怎么做呢?

既然您的“策略”类继承自
policy\u Base
,为什么不导入所有相关模块,然后执行类似操作

import re

def slugify(s):
    return re.sub(r'\W+', '-', s.lower().replace('_', '-'))

def get_slug_to_class_items(policy_class):
    yield (slugify(policy_class.__name__), policy_class)
    for subclass in policy_class.__subclasses__():
        for slug, subclass in get_slug_to_class_items(subclass):
            yield (slug, subclass)

slug_to_class = dict(get_slug_to_class_items(Policy_Base))
# print repr(slug_to_class)
get\u slug\u to\u class\u items
函数查找继承自
Policy\u Base
(递归迭代类层次结构)的类,并返回一个2元组(slug,class)生成器,将其设置为预期的
dict

请注意,在调用
get\u slug\u to\u class\u items

policy\u class之前导入所有具有“policy”类的模块非常重要。子类看起来正是我需要的,非常感谢。