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

shm*_*ova 3 python oop

我在我的课堂上有self.some_field = []我在
询问是否有办法让这个列表像资产一样只读?

Ale*_*lli 7

你需要把它变成一个属性...:例如,在...中 __init__

self._some_field = []
Run Code Online (Sandbox Code Playgroud)

然后在课堂上:

@property
def some_field(self):
    return self._some_field
Run Code Online (Sandbox Code Playgroud)

请注意,这并没有使列表本身不变:什么会失败是分配公司,比如,

self.some_field = 'bah'
Run Code Online (Sandbox Code Playgroud)

不是说变种人的召唤,比如说,

self.some_field.append('blah')
Run Code Online (Sandbox Code Playgroud)

如果你想让字段不可变,根据定义,它不能是一个列表(因为列表是一个可变序列) - 它必须是你需要为此目的定义的其他类型的序列(一个不可变的序列).