Armazenando valores calculados em um objeto

Recentemente, eu tenho escrito um monte de código como este:

class A:
  def __init__(self, x):
    self.x = x
    self._y = None

  def y(self):
    if self._y is None:
      self._y = big_scary_function(self.x)

    return self._y

  def z(self, i):
    return nice_easy_function(self.y(), i)

Em uma determinada aula, posso ter várias coisas funcionando assimy, e eu posso ter outras coisas que usam os valores pré-calculados armazenados. Essa é a melhor maneira de fazer as coisas ou você recomendaria algo diferente?

Observe que eu não pré-calculo aqui porque você pode usar uma instância deA sem fazer uso dey.

Eu escrevi o código de exemplo em Python, mas eu estaria interessado em respostas específicas para outros idiomas, se relevante. Por outro lado, eu gostaria de ouvir dos Pythonistas sobre se eles sentem que esse código é Pythonic ou não.

questionAnswers(3)

yourAnswerToTheQuestion