我有一个代码:
def constant(f):
def fset(self, value):
raise SyntaxError( "You can't change a constant!" )
def fget(self):
return f(self)
return property(fget, fset)
class A( object ):
def __init__( self, a_list ):
super( A, self ).__init__()
self.__data = a_list[:]
@constant
def data( self ):
return self.__data
我想让自我.__数据可访问,但不可更改且无法从课堂外进行.我不能简单地将其更改为元组,因为我希望它更容易更改类中的方法.当有人修改列表时,我上面提到的解决方案不起作用:
>>> a = A( range(5) )
>>> a.data = []
Traceback (most recent call last):
...
SyntaxError: You can't change a constant! # it works
>>> a.data[0]=6 # it doesn't work
>>> a.data
[6, 1, 2, 3, 4]
你知道我的问题有什么好的解决方案吗?
解决方法:
您还可以创建一个View类,该类实现列表的所有读取操作.当然,仍然有办法访问内部列表,没有办法阻止这一点.
class ListView(object):
def __init__(self, list_):
self._list = list_
def __getitem__(self, index):
return self._list[index]
def __repr__(self):
return 'ListView(%r)' % self._list
def index(self, value):
return self._list.index(value)
# and so on
(从移动设备发送)