gpt4 book ai didi

python - 使 python 列表恒定且不可编辑

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:43 27 4
gpt4 key购买 nike

我有一个代码:

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

我想让 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

(从移动设备发送)

关于python - 使 python 列表恒定且不可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com