数组作为Python中的私有属性,而不是它的内容如何获得它?

数组作为Python中的私有属性,而不是它的内容如何获得它?,python,python-3.x,Python,Python 3.x,假设我有以下课程: class Test: def __init__(self, arr): self.__arr = arr @property def arr(self): return self.__arr 现在,如果我的目的是不“允许”该类实例的用户不将新数组设置为arr,那么这就完成了任务。例如: t = Test(np.random.rand(3,3)) t.arr = np.random.rand(3,3) 将引发错误:AttributeErro

假设我有以下课程:

class Test:
    def __init__(self, arr):
       self.__arr = arr

@property
def arr(self):
    return self.__arr
现在,如果我的目的是不“允许”该类实例的用户不将新数组设置为arr,那么这就完成了任务。例如:

t = Test(np.random.rand(3,3))
t.arr = np.random.rand(3,3)
将引发错误:
AttributeError:无法设置属性

这正是我想要的,但是,如果用户执行以下操作:

 t = Test(np.random.rand(3,3))
 t.arr[0,0] = 1

没有出现错误。关于如何不允许用户这样做的提示?每当发生上述任何一种情况时,我都希望引发相同的错误

Python没有私有属性。双下划线名称损坏与私有属性不同。这是为了防止子类化上的名称串通。再说一次,Python中没有隐私模型,一切都是公开的。无论如何,你不能阻止这一点。如果用户可以访问该数组,则无法阻止他们对该数组进行变异,因为numpy数组是可变的。如果您不想让用户对该数组所做的任何更改反映在对象的内部状态中,则始终可以返回内部数组的副本。副本可以灵活地完成此工作!ThanksPython没有私有属性。双下划线名称损坏与私有属性不同。这是为了防止子类化上的名称串通。再说一次,Python中没有隐私模型,一切都是公开的。无论如何,你不能阻止这一点。如果用户可以访问该数组,则无法阻止他们对该数组进行变异,因为numpy数组是可变的。如果您不想让用户对该数组所做的任何更改反映在对象的内部状态中,则始终可以返回内部数组的副本。副本可以灵活地完成此工作!谢谢