我有一些话题要讨论。我有一个24 ifs / elifs的代码片段。Operation是我自己的类,表示类似于的功能Enum。 这是一段代码:
if
elif
Operation
Enum
if operation == Operation.START: strategy = strategy_objects.StartObject() elif operation == Operation.STOP: strategy = strategy_objects.StopObject() elif operation == Operation.STATUS: strategy = strategy_objects.StatusObject() (...)
从可读性的角度来看,我有些担心。将其更改为24类并使用多态性更好吗?我不相信这将使我的代码可维护…一方面,这些ifs很清楚,应该很容易理解,另一方面,ifs太多了。
我的问题相当笼统,但是我正在用Python编写代码,所以我不能使用switch。
switch
你怎么看?
更新 :
重要的一点是StartObject(),StopObject()并且StatusObject()是构造函数,我想分配一个对象以进行strategy引用。
StartObject()
StopObject()
StatusObject()
strategy
您可以使用字典。字典存储引用,这意味着函数完全可以使用,如下所示:
operationFuncs = { Operation.START: strategy_objects.StartObject Operation.STOP: strategy_objects.StopObject Operation.STATUS: strategy_objects.StatusObject (...) }
最好有一个默认操作以防万一,因此在运行它时,请使用atry except并处理异常(即,与else子句等效的对象)
try except
else
try: strategy = operationFuncs[operation]() except KeyError: strategy = strategy_objects.DefaultObject()
或者,使用字典的get方法,如果找不到您提供的键,则该方法允许您指定默认值。
get
strategy = operationFuncs.get(operation(), DefaultObject())
请注意,将它们存储在字典中时不包括括号,而在调用字典时才使用它们。同样,这要求它必须是Operation.START可散列的,但情况确实如此,因为您将其描述为类似于ENUM的类。
Operation.START