像列表/元组一样的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有没有什么方法可以让我们在像 foo.weights[i] = bar
这样的索引操作时,定义一些获取和设置的功能呢?
2 个回答
1
更多选择:
与其创建一个新的容器类型,不如使用已经存在的、能满足你需求的元组(tuple):
self.weights = tuple()
for i in (...) :
self.weights += (<new_item>,)
或者,如果你真的想用列表,那就把权重(weights)设置为一个 @property
,并返回原始列表的一个副本。
@property
def weights(self) :
return [j for j in self._weights]
5
当然可以。你需要在你的类里面重写一下 __setitem__ 这个方法。
class Weights(list):
def __setitem__(self, key, value):
....
这里有一个文档链接,里面有详细的说明:
http://docs.python.org/2/reference/datamodel.html#object.__setitem__