Almacenar valores calculados en un objeto

Recientemente he estado escribiendo un montón 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)

En una clase dada, puedo tener varias cosas trabajando asíy, y es posible que tenga otras cosas que usan los valores precalculados almacenados. ¿Es esta la mejor manera de hacer las cosas o recomendarías algo diferente?

Tenga en cuenta que no calculo previamente aquí porque podría usar una instancia deA sin hacer uso dey.

He escrito el código de muestra en Python, pero estaría interesado en respuestas específicas a otros idiomas si es relevante. Por el contrario, me gustaría saber de Pythonistas si sienten que este código es Pythonic o no.

Respuestas a la pregunta(3)

Su respuesta a la pregunta