降低面向对象python代码的循环复杂度

时间:2018-11-14 20:05:59

标签: python python-3.x cyclomatic-complexity

我正在尝试降低代码的语言复杂性,因为根据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))

如果不可能的话,还有什么其他方法可以降低圈复杂度。

1 个答案:

答案 0 :(得分:3)

首先,应在__init__中定义字典,否则每次输入O(n)函数时都会具有select_one的复杂性(每次都会构建字典,因此在链接中有示例错误)

第二,您的方法与属性具有相同的名称。更改:

class trial:
    def __init__(self):
        self.a = 'a'
        self.b = 'b'
        self.map_func = {
        1 : self.f_a,
        2 : self.f_b
        }

    def f_a(self):
        return self.a

    def f_b(self):
        return self.b

    def select_one(self, option):
        return self.map_func[option]()

t = trial()
print(t.select_one(1))