类似于列表/元组的setter和getter



我有一个使用Numpy的项目。其中一个类需要一组称为权重的矩阵。出于几个原因,最好将所有这些矩阵值存储为一个长向量,并让每个单独的矩阵都是其中一个切片的视图。

self.weightvector = asmatrix(rand(nweights, 1)) # All the weights as a vector
self.weights = list() # A list of views that have the 'correct' shape
for i in range(...):
    self.weights.append(...)

如果类的用户执行类似foo.weights[i] = bar的操作,那么这些权重将不再是原始权重向量的视图。

Python是否提供了一种机制,可以通过它定义getter和setter,以便在完成诸如foo.weights[i] = bar之类的索引时使用?

当然。您希望覆盖类上的__setitem__方法。

class Weights(list):
    def __setitem__(self, key, value):
         ....

以下是文档链接:
http://docs.python.org/2/reference/datamodel.html#object.__setitem__

更多选项:

您可以重用现有的元组(tuple:),而不是实现新的容器类型

self.weights = tuple()
for i in (...) :
    self.weights += (<new_item>,)

或者,如果您真的想使用列表,请将权重设为@property,并返回原始列表的副本。

@property
def weights(self) :
    return [j for j in self._weights]

相关内容

  • 没有找到相关文章

最新更新