Calcular atributo se ele não existir

Estou tentando acessar um atributo que não deve ser criado no diretório__init__ método da minha classe, mas pode ser calculado chamando outro método. Estou tentando fazer com que, se eu tentar acessar o atributo e ele não existir, ele será calculado automaticamente. No entanto, não quero que seja recalculado se o atributo existir, mesmo que o valor seja diferente. Por exemplo:

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

Minha melhor solução até agora é criar um método get_total () que faça o que eu preciso.

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

Isso está funcionando bem, mas eu li que o uso de getters em python é desencorajado e eu esperava evitar chamar essa função sempre que quisesse acessar o atributo. Essa é minha melhor solução ou existe uma maneira mais limpa e mais pitônica de fazer isso?

Este é um exemplo que eu inventei. No meu problema atual, o calcul_total () é um processo demorado que não precisa necessariamente ser chamado. Então, eu não quero executá-lo noiniciar método.