【发布时间】:2018-11-14 20:05:58
【问题描述】:
我正在尝试降低代码的 cylomatic 复杂性,因为根据 pylama 我的定义是“太复杂”并且建议 solution 包括使用字典映射调用函数。
所以我在我的面向对象代码上尝试了它,但惨遭失败。
class trial:
def __init__(self):
self.a = 'a'
self.b = 'b'
def a(self):
return self.a
def b(self):
return self.b
def select_one(self, option):
map_func = {
1 : self.a,
2 : self.b
}
return map_func[option]()
t = trial()
print(t.select_one(1))
如果这是不可能的,还有哪些其他可能的解决方案来降低圈复杂度。
【问题讨论】:
-
您应该在
__init__中一劳永逸地定义map_func,这样就不会每次都重做,否则字典的意义何在 -
除此之外我认为没有复杂性...
-
你也有相同的函数和字符串。请改变它。这可能就是为什么它不适合你
-
为什么会降低圈复杂度?您引入了一个工厂函数,该函数调用您自己可以通过名称调用的其他两个函数之一?另外:使用
dict.get()或在提供给映射器的“alosdfböoads”上惨死。这几乎是代码混淆——谁知道 1 或 2 会做什么? -
@PatrickArtner 这只是一个例子,我会将我的选项从 1,2 更改为更明智的选项,我之前的(太复杂的代码有)一个带有 if else 阶梯的单一方法来选择一个选项。
标签: python python-3.x cyclomatic-complexity