Я использую декораторы свойств и сеттеров следующим образом:
class PCAModel(object):
def __init__(self):
self.M_inv = None
@property
def M_inv(self):
return self.__M_inv
@M_inv.setter
def set_M_inv(self):
M = self.var * np.eye(self.W.shape[1]) + np.matmul(self.W.T, self.W)
self.__M_inv = np.linalg.inv(M)
Это приводит к ошибке в функции __init__
, потому что мой установщик не принимает аргумент:
TypeError: M_inv() takes 1 positional argument but 2 were given
Я не хочу устанавливать M_inv
с аргументом, поскольку вычисления M_inv
основаны исключительно на других свойствах объекта класса. Я мог бы поставить фиктивный аргумент в сеттер:
@M_inv.setter
def set_M_inv(self, foo):
M = self.var * np.eye(self.W.shape[1]) + np.matmul(self.W.T, self.W)
self.__M_inv = np.linalg.inv(M)
но это кажется грязным. Есть ли лучший способ обойти это?