python防止随意修改类属性的实现方法

 更新时间:2019年08月21日 08:23:14   投稿:zx  
这篇文章主要介绍了python防止随意修改类属性的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

如果不想允许随意修改一个类的某个属性,常用的方法是使用property装饰器以及在属性前加下划线。

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

虽然这样是没法直接修改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就可以了,不过误操作的可能性已经降低很多了。

p.s.类也有__dict__属性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python日志采集代码详解

    Python日志采集代码详解

    这篇文章主要介绍了Python日志采集,在实际使用python做自动化测试过程中两种解决思路都可以使用,且都挺方便,其中对于思路1,还可以将代码进行更进一步的封装,需要的朋友可以参考下
    2022-05-05
  • Queue 实现生产者消费者模型(实例讲解)

    Queue 实现生产者消费者模型(实例讲解)

    下面小编就为大家带来一篇Queue 实现生产者消费者模型(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • python Task在协程调用实例讲解

    python Task在协程调用实例讲解

    在本篇文章里小编给大家整理了一篇关于python Task如何在协程调用的相关内容,有兴趣的朋友们可以参考下。
    2021-04-04
  • pytorch 使用加载训练好的模型做inference

    pytorch 使用加载训练好的模型做inference

    今天小编就为大家分享一篇pytorch 使用加载训练好的模型做inference,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python3 Post登录并且保存cookie登录其他页面的方法

    Python3 Post登录并且保存cookie登录其他页面的方法

    今天小编就为大家分享一篇Python3 Post登录并且保存cookie登录其他页面的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 2023年最新版Python 3.12.0安装使用指南(推荐!)

    2023年最新版Python 3.12.0安装使用指南(推荐!)

    这篇文章主要给大家介绍了关于2023年最新版Python 3.12.0安装使用的相关资料,Python 现在是非常流行的编程语言,当然并不是说Python语言性能多么强大,而是Python使用非常方便,特别是现在AI和大数据非常流行,用 Python 实现是非常容易的,需要的朋友可以参考下
    2023-10-10
  • Python绘制指数概率分布函数

    Python绘制指数概率分布函数

    指数分布是一种广泛应用于数据科学和统计学中的连续概率分布,本文将详细介绍如何在Python中快速上手绘制指数分布的概率密度函数图,需要的可以参考下
    2025-01-01
  • Python实现数字的格式化输出

    Python实现数字的格式化输出

    这篇文章主要介绍了Python如何实现数字的格式化输出,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python 如何实现批量转换视频音频的采样率

    Python 如何实现批量转换视频音频的采样率

    这篇文章主要分享一个python代码,可以将多个视频中的音频转化为相同采样率的视频,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2021-11-11
  • PyQt5中QLCDNumber的实现

    PyQt5中QLCDNumber的实现

    本文主要介绍了PyQt5中QLCDNumber的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04

最新评论