Рассчитать атрибут, если он не существует

Я пытаюсь получить доступ к атрибуту, который не должен быть создан в__init__ метод моего класса, но можно рассчитать, вызвав другой метод. Я пытаюсь сделать так, чтобы, если я пытаюсь получить доступ к атрибуту, а он не существует, он будет автоматически рассчитан. Однако я не хочу, чтобы он был пересчитан, если атрибут существует, даже если значение будет другим. Например:

class SampleObject(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def calculate_total(self):
        self.total = self.a + self.b

sample = SampleObject(1, 2)
print sample.total   # should print 3
sample.a = 2
print sample.total   # should print 3
sample.calculate_total()
print sample.total   # should print 4

Мое лучшее решение на данный момент - создать метод get_total (), который делает то, что мне нужно.

class SampleObject2(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def calculate_total(self):
        self.total = self.a + self.b

    def get_total(self):
        if hasattr(self, 'total'):
            return self.total
        else:
            self.calculate_total()
            return self.total

sample2 = SampleObject2(1, 2)
print sample2.get_total() # prints 3
sample2.a = 2
print sample2.get_total() # prints 3
sample2.calculate_total()
print sample2.get_total() # prints 4

Это работает нормально, но я читал, что использование getters в python не рекомендуется, и я надеялся избегать вызова этой функции каждый раз, когда я хотел получить доступ к атрибуту. Это мое лучшее решение, или есть более чистый, более питонический способ сделать это?

Это пример, который я составил. В моей реальной задаче метод execute_total () - это трудоемкий процесс, который не обязательно вызывать. Поэтому я не хочу выполнять это вв этом метод.

Ответы на вопрос(2)

Ваш ответ на вопрос