Понимание того, как в Python используется закрытая переменная, украшенная @property - PullRequest
0 голосов
/ 13 сентября 2018

Ниже приведен фрагмент моего кода

class TestClass:
    def __init__(self,n1,n2):
        self.n1 = n1
        self.n2 = n2
        self._sum = None # WILL BE COMPUTED LATER ON

    @property
    def sum(self):
        if self._sum is None:
           self._sum = self.compute_sum()
        return self._sum

    def compute_sum(self):
        return(self.n1+self.n2)

test_obj = TestClass(5,6)

print(test_obj.sum)

Это просто пример программы, иллюстрирующей проблему, с которой я сталкиваюсь. У меня есть класс с закрытой переменной _sum, в котором я хотел бы хранить значение двух чисел n1 и n2.

Сумма свойства может использоваться внешним миром (так сказать) для доступа к значению суммы, не имея возможности изменять ее значение. Причина, по которой у меня есть закрытая переменная _sum, заключается в том, что значение вычисляется один раз и сохраняется для последующих выборок.

Просто наличие @property будет вычислять значение каждый раз, когда кто-то пытается получить доступ к значению суммы через экземпляр, и я хотел бы избежать этого влияние на производительность (имейте в виду, это всего лишь пример, иллюстрирующий реальную проблему, с которой я сталкиваюсь)

Учитывая мое требование иметь возможность суммировать все внешние объекты для использования, но в то же время не вычислять его при каждом вызове, является ли моя реализация разумной, правильной?

Также довольно интересно, что значение _sum вычисляется еще до вызова функции, по крайней мере, моя IDE смогла это сделать, не знаю как.

На скриншоте, показанном ниже, мы находимся в строке 9, и compute_sum () не был вызван, но значение уже вычислено. Как так ?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...