gpt4 book ai didi

python - 如何防止 Python 中的类字段(列表)更改?

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:25 25 4
gpt4 key购买 nike

例如,我有一个类,它有一个字段__x,它是一个列表:

class C():
def __init__(self, xx):
self.__x = xx
@property
def x(self):
return self.__x
@x.setter
def x(self, xx):
raise Exception("Attempt to change an immutable field")

我可以阻止诸如此类的更改:

c = C([1,2,3])
c.x = [3,2,1]

但是我怎样才能防止这样的变化呢?

c.x.append(4)

最佳答案

归根结底,您无法保护您的对象免受检查和操纵。另外,总是问自己“究竟来自谁?”当您想“保护”数据时。

有时,围绕不阅读文档的用户进行编码是不值得的。

也就是说,您可以考虑在 getter 中使用 return tuple(self.__x)。另一方面,如果 __x 包含其他可变对象,则不会阻止用户操纵这些内部对象。 (return list(self.__x) 也将返回数据的浅拷贝,但没有那么隐含的“嘿,我应该是不可变的!”信号。)

你绝对应该考虑的是在 __init__ 方法中将 self.__x = xx 更改为 self.__x = list(xx) , 这样用户就可以做

var = []
c = C(var)

不能通过改变 var 来“轻易地”(或者错误地,并且可能有可变的内部对象)改变 c 的状态。

关于python - 如何防止 Python 中的类字段(列表)更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53421101/

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