gpt4 book ai didi

没有参数的 Python setter?

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:54 26 4
gpt4 key购买 nike

我正在按照以下方式使用属性和 setter 装饰器:

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)

但那感觉很脏。有没有更好的方法来解决这个问题?

最佳答案

尽管名称很容易理解,但您忽略了 setter 和 getter 的要点。如果您的参数是独立于您尝试设置的内容计算的(您想在 setter 中省略参数),那么根本不需要 setter。由于您要做的就是为每个实例计算此参数,只需计算并返回 getter 中的值,因此每次您尝试访问参数时,您都会得到正确的新计算值.

    @property
def M_inv(self):
M = self.var * np.eye(self.W.shape[1]) + np.matmul(self.W.T, self.W)
return np.linalg.inv(M)

关于没有参数的 Python setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com