【发布时间】:2019-06-03 05:34:24
【问题描述】:
我正在以下方式使用属性和设置器装饰器:
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__ 函数中产生错误,因为我的 setter 没有接受参数:
TypeError: M_inv() takes 1 positional argument but 2 were given
我不想用参数设置M_inv,因为M_inv 的计算仅依赖于类对象的其他属性。我可以在 setter 中放置一个虚拟参数:
@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)
但这感觉很脏。有没有更好的方法来解决这个问题?
【问题讨论】:
标签: python properties setter