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”类的模块非常重要。子类看起来正是我需要的,非常感谢。