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

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

本文介绍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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。