我有一些话题要讨论。我有一段代码 24if
s/elif
s. Operation
是我自己的类,代表的功能类似于Enum https://docs.python.org/3/library/enum.html.
这是代码片段:
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类并使用多态性 https://stackoverflow.com/a/1031385/8554766?我不相信它会让我的代码可维护......从一方面来说if
非常清楚,应该不难理解,但另一方面,有太多if
s.
我的问题相当笼统,但是我正在用Python编写代码,所以我不能使用像这样的结构switch https://en.wikipedia.org/wiki/Switch_statement.
你怎么认为?
UPDATE:
一件重要的事情是StartObject()
, StopObject()
and StatusObject()
是构造函数,我想将一个对象分配给strategy
参考。
您可能会使用字典。字典存储引用,这意味着函数完全可以使用,如下所示:
operationFuncs = {
Operation.START: strategy_objects.StartObject
Operation.STOP: strategy_objects.StopObject
Operation.STATUS: strategy_objects.StatusObject
(...)
}
最好有一个默认操作以防万一,所以当你运行它时使用try except
并处理异常(即相当于你的else
clause)
try:
strategy = operationFuncs[operation]()
except KeyError:
strategy = strategy_objects.DefaultObject()
或者使用字典get
方法,如果找不到您提供的密钥,该方法允许您指定默认值。
strategy = operationFuncs.get(operation(), DefaultObject())
请注意,将它们存储在字典中时不包含括号,只需在调用字典时使用它们。这也要求Operation.START
是可散列的,但情况应该如此,因为您将其描述为类似于 ENUM 的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)