【发布时间】:2019-06-03 05:16:03
【问题描述】:
我正在关注python course 中的此代码示例:
class P:
def __init__(self,x):
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
if x < 0:
self.__x = 0
elif x > 1000:
self.__x = 1000
else:
self.__x = x
我尝试在我自己的代码中实现这种模式:
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)
请注意,在我第一次运行 setter 之前,我希望 M_inv 属性为 None。此外,setter 仅依赖于类对象的其他属性,而不依赖于输入参数。
setter 装饰器产生错误:
NameError: name 'M_inv' is not defined
这是为什么?
【问题讨论】:
-
将 def set_M_inv 重命名为 def M_inv。它应该与上面的装饰器匹配。 stackoverflow.com/questions/598077/…
-
谢谢,问题解决了!
标签: python properties