作为列表/元组行事的setter和getters
问题描述:
我有一个使用Numpy的项目。其中一个类需要一组称为权重的矩阵。出于以下几个原因,如果我将所有这些矩阵值存储为一个长向量,并且让每个单独的矩阵成为该切片的视图,那么最好。作为列表/元组行事的setter和getters
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是否提供了一种机制,通过该机制可以为何时建立索引(例如foo.weights[i] = bar
)而定义getter和setter?
答
当然。你想覆盖你的类的__setitem__方法。
class Weights(list):
def __setitem__(self, key, value):
....
下面是该文档的链接:
http://docs.python.org/2/reference/datamodel.html#object.__setitem__
答
更多选择:
,而不是实施新的容器类型,你可以重用,做你想要的,一个什么样的现有元组:
self.weights = tuple()
for i in (...) :
self.weights += (<new_item>,)
或者,如果你真的想用一个列表,使权重@property
并返回原始列表的副本。
@property
def weights(self) :
return [j for j in self._weights]
如果从继承'list'您可能还需要考虑覆盖'__setslice__',请参阅[文档](http://docs.python.org/2/reference/datamodel.html#additional-方法换仿真-的序列类型)。 – Jaime 2013-02-21 13:32:57