Python中防止类属性被随意修改的几种方式

雨后青山
雨后青山
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍Python中防止类属性被随意修改的三种常见方法:使用property装饰器、单下划线约定以及双下划线引发的名称改写(name mangling)机制。通过对比分析,说明双下划线如何降低误操作风险,并指出其仍可通过特定方式访问和修改。

Python类属性保护的常见方法

若希望限制对类中某个属性的直接修改,通常的做法是结合使用property装饰器,并在属性名前方添加下划线以表示其为内部属性。

使用Property装饰器与单下划线


class V:
  def __init__(self, x): 
    self._x = x
  
  @property
  def x(self):
    return self._x 

尽管这种方式阻止了对x的直接赋值,但用户仍可通过访问_x轻松修改该值。


>>>v = V(5)
>>>v.x
5
>>>v._x
5
>>>v.x = 4
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: cant set attribute
>>>v._x = 4
>>>v.x
4

考虑到实际开发中可能出现的手误情况,这种保护机制显得不够严密。

若改用双下划线作为前缀,则可实现更强的保护效果。

双下划线与名称改写机制


class V:
  def __init__(self,x):
    self.__x = x

  @property
  def x(self):
    return self.__x


>>>v = V(5)
>>>v.__x = 4
>>>v.__x
4
>>>v.x
5

这归因于Python的名称改写(name mangling)机制:当实例属性以双下划线开头时,Python会在该属性名前自动添加一个下划线和类名,并将其存入实例的__dict__中。

名称改写后的访问与修改方式


>>>v = V(5)
>>>v.__dict__
{'_V__x': 5}
>>>v.__x = 4
>>>v.__dict__
{'_V__x': 5, '__x': 4}

当然,修改v.x的值仍然可行,只需通过访问v._V__x即可实现,但这种方式大大降低了误操作的可能性。

补充说明:类本身也具备__dict__属性。

以上内容为本文的全部讲解,期望对读者的学习有所助益,同时也欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表