我有一个基类和几个子类。每个子类有所谓的“正则表达式”包含字符串的属性:将所有子类组织成Python中的字典的好方法?
# 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的所有子类字典使用每个班正则表达式作为重点。我希望逻辑将类注册为基类。
上面的例子不起作用,我相信这是因为舞蹈和唱变量在名称空间使用时尚不可用。
有没有办法在类初始化期间注册字典中的子类?
你为什么要使用单独的类呢?使正则表达式成为实例成员和Sing,Dance等实例有什么不对? –
实际上,我希望Sing和Dance类具有独特的__init__函数。我认为使用类似于Ignacio提供的示例中的元类模式实际上提供了两种最好的方式 - 子类是实例,但也可以具有唯一的初始化函数。 –