你可以使用字典.字典存储引用,这意味着函数完全可以使用,如下所示:
operationFuncs = {
Operation.START: strategy_objects.StartObject
Operation.STOP: strategy_objects.StopObject
Operation.STATUS: strategy_objects.StatusObject
(...)
}
最好有一个默认操作以防万一,所以当你运行它时使用try除了并处理异常(即相当于你的else子句)
try:
strategy = operationFuncs[operation]()
except KeyError:
strategy = strategy_objects.DefaultObject()
或者使用字典的get方法,如果找不到您提供的密钥,则允许您指定默认值.
strategy = operationFuncs.get(operation(), DefaultObject())
请注意,将它们存储在字典中时不包括括号,只需在调用字典时使用它们.此外,这要求Operation.START可以清洗,但是应该是这种情况,因为您将其描述为类似于ENUM的类.