如何在Python中使类字段[list]为只读?

3 投票
2 回答
1494 浏览
提问于 2025-04-16 01:27

我在我的类里有一个叫做self.some_field的空列表。
我想知道有没有办法让这个列表像属性一样变成只读的?

2 个回答

1

如果你指的是属性,那就把它设置成只读的。如果你指的是列表本身,那就用元组来代替,因为元组是不可改变的。

7

你确实需要把它变成一个属性... 比如,在 __init__

self._some_field = []

然后在类的主体部分:

@property
def some_field(self):
    return self._some_field

注意,这并意味着列表本身是不可变的:会失败的是像这样的一个赋值,比如:

self.some_field = 'bah'

而不是调用一个修改器,比如:

self.some_field.append('blah')

如果你想让这个字段不可变,那么它不能是一个列表,因为列表是可以改变的序列——它必须是其他类型的序列(一个不可变的序列),你需要为这个目的定义它。

撰写回答