Должен ли я использовать self.variable для всех методов класса? - PullRequest
0 голосов
/ 16 января 2020

Я хотел поискать, есть ли похожий вопрос, но я даже не знаю, какие ключевые слова искать.

Я хочу сделать класс примерно таким (много упростил для этого поста):

class MyClass:
    def __init__(self, a, b=None):
        if b is None:
            b = 0
        self.a = a
        self.b = b

    def do_calc(self, const=None):
        if const is None:
            const = 1
        abc = self.a*self.b*self.const
        self.const = const
        self.abc = abc
        self.result = self.abc**2 + self.b*self.const**2 + 2*self.abc + self.const

Мой вопрос заключается в том, могу ли я укоротить последнюю строку в части do_calc до

        self.result = abc**2 + self.b*const**2 + 2*abc + const

В моем реальном коде последняя строка становится слишком длинной, если я использую self. в перед всеми переменными, поэтому я хотел сократить их без потери читабельности. Конечно, код должен работать, но мне интересно, есть ли потенциальные проблемы с этим. У меня было чувство, что лучше использовать self. все время, но я не вижу конкретной причины для этого до сих пор.

1 Ответ

1 голос
/ 16 января 2020

Ваше определение do_calc излишне long , так как нет необходимости хранить abc или const в качестве атрибутов экземпляра. Однако вы можете сохранить self.a и self.b как временные локальные переменные для сокращения вычислений.

def do_calc(self, const=1):  # 1 is immutable, so it's safe to use as a default
    a = self.a  # Optional, you can refer directly to self.a below
    b = self.b  # Optional, you can refer directly to self.b below
    abc = a * b * const
    self.result =  abc**2 + b*const**2 + 2*abc + const

Другая проблема заключается в том, должен ли do_calc кэшировать этот результат в самом экземпляре или просто возврат расчетное значение.

def do_calc(self, const=1):
    a = self.a
    b = self.b
    abc = a * b * const
    return abc**2 + b*const**2 + 2*abc + const
...