使python列表保持不变且不可编辑

我有一个代码:

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

(从移动设备发送)

点赞