Снижение цикломатической сложности объектно-ориентированного кода Python - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь уменьшить цикломатическую сложность кода, потому что согласно pylama мое определение является «слишком сложным» и предлагает решение включает в себя вызов функций с отображениями в словарь.

Итак, я попробовал это на своем объектно-ориентированном коде, но с треском провалился.

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 голосов
/ 14 ноября 2018

Во-первых, словарь должен быть определен в __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))
...