我有一个使用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]