在python中将所有子类组织成字典的好方法?
发布时间:2020-12-20 11:20:54 所属栏目:Python 来源:网络整理
导读:我有一个基类和几个子类.每个子类都有一个名为“ regex”的属性,其中包含一个字符串: # module level dictionaryaction_types = {}class Action(): regex = '.*' @classmethod def register_action(cls): action_types[cls.regex] = clsclass Sing(Action):
我有一个基类和几个子类.每个子类都有一个名为“
regex”的属性,其中包含一个字符串:
# module level dictionary action_types = {} class Action(): regex = '.*' @classmethod def register_action(cls): action_types[cls.regex] = cls class Sing(Action): regex = r'^SING [0-9]+' Sing.register_action() class Dance(Action): regex = r'^DANCE [0-9]+' Dance.register_action() 我想使用每个类的正则表达式作为键来注册action_types字典中的所有子类.我希望逻辑将类注册到基类. 上面的例子不起作用,我相信这是因为当使用它们时,名称空间中的Dance和Sing变量尚不可用. 有没有办法在类初始化期间在字典中注册子类? 解决方法
这不是你想要的方式.
class ActionRegistry(type): registry = {} def __init__(cls,name,bases,dic): if 'regex' in dic: cls.registry[dic['regex']] = cls super(ActionRegistry,cls).__init__(name,dic) class Action(object): __metaclass__ = ActionRegistry class Sing(Action): regex = r'^SING [0-9]+' class Dance(Action): regex = r'^DANCE [0-9]+' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |