Я хочу спросить ваши предложения о том, как создать класс Python, который наилучшим образом соответствует моим потребностям.
Предположим, я сначала ввел Python класс LatticeClass
. В частности, LatticeClass
поставляется с методом TheModel()
, который может создать эрмитовую матрицу HH
, как показано ниже:
obj = LatticeClass()
obj.a = 3.0
obj.b = -0.80
HH = obj.TheModel()
Теперь я хочу представить еще один Python класс LatticeProperty
, который наследуется от LatticeClass
. Этот класс будет вычислять собственные значения и собственные векторы HH
, а также использовать их для вычисления чего-то еще. Например, вот код, который я написал:
class LatticeProperty(LatticeClass):
def __init__(self):
super().__init__()
@property
def spectrum(self):
HH = self.TheModel()
mat = HH.todense()
print(mat.shape)
val, vec = Lib.eig(mat)
return val, vec
def Method1(self):
val, vec = self.spectrum
total_energy = val.sum()
return total_energy
Предположим, я сейчас напишу следующий код:
newobj = LatticeProperty()
newobj.a = 3.0
newobj.b = -0.80
Мне нужно следующее:
- Когда я звоню
newobj.spectrum
, я могу просто попросить систему дать мне собственные значения и собственные векторы без повторной диагонализации, если я не изменю параметры a
и b
. - Когда я звоню
newobj.Method1()
, он должен дать мне окончательный ответ, используя сохраненные собственные значения и собственные векторы, без вызова диагонализации матрицы.
Однако в этот момент система выполняет матричную диагонализацию каждый раз, когда я называю newobj.spectrum
. Что я должен сделать, чтобы решить эту проблему?
Спасибо!