Python中私有属性的定义方式

 更新时间:2020年03月05日 09:07:46   作者:Daniel2333  
这篇文章主要介绍了Python中私有属性的定义方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field.

示例代码:

class Vector2D(object):
  def __init__(self, x, y):
    self.__x = float(x)
    self.__y = float(y)
    self.xx = x
    self.yy = y 
  def get_x(self):
    return self.__x # 内部访问
if __name__ == "__main__":
  v = Vector2D(3, 4)
  print v.__dict__
  print v._Vector2D__x, v.get_x()# 但是可以通过v._Vector2D__x 在外部访问
  v.__x # 外部访问

输出:

{'yy': 4, 'xx': 3, '_Vector2D__x': 3.0, '_Vector2D__y': 4.0}
3.0 3.0
Traceback (most recent call last):
...
v.__x
AttributeError: 'Vector2D' object has no attribute '__x'

从上面的例子可以看出:

1. __field被编译器重命名为_className__field

2. 在class外部不能访问obj.__field, 但在class内部可以

3. 但是, 这只能防止无意间的调用, 不能防止恶意调用, 用Fluent Python的话来讲, 这是一种safety device, not security device, 用国语来讲, 就是防君子不防xx, 因为可以通过obj._className__field在外部访问obj的私有__field.

补充知识:python中私有属性和私有方法,修改私有属性的值

如果一个属性是以两个下划线开始 就标识这个这个属性是一个私有属性

self.__money = 1000000

如果一个方法是以两个下划线开始 也代表已经私有

子类继承了父类 如果父类的属性私有 将不会被子类继承

私有属性和私有方法可以在类的里面使用

自定义类中 如果一个属性进行了私有 在类的外面不能调用

修改私有属性的值

如果需要修改一个对象的属性值,通常有2种方法

对象名.属性名 = 数据 ----> 直接修改

对象名.方法名() ----> 间接修改

私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。

class Person(object):
 
  def __init__(self):
    self.name = "小明"
    self.__age = 20
 
  #获取私有属性的值
  def get_age(self):
    return self.__age
 
  #设置私有属性的值
  def set_age(self, new_age):
    self.__age = new_age
 
 
#定义一个对象
p = Person()
#强行获取私有属性
#崇尚一切靠自觉
print(p._Person__age)
print(p.name)
#想在类的外面获取对象的属性
ret = p.get_age()
print(ret)
 
#想在类的外面修改对象私有属性的值
p.set_age(30)
print(p.get_age())

以上这篇Python中私有属性的定义方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python操作MongoDb数据库流程详解

    Python操作MongoDb数据库流程详解

    这篇文章主要介绍了Python操作MongoDb数据库流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    这篇文章主要介绍了Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 源码解读Python中Event事件的使用

    源码解读Python中Event事件的使用

    事件(Event)主要负责多任务之间的同步,这篇文章主要来和大家详细介绍一下它的原理以及简单使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2023-12-12
  • PyQt5 实现字体大小自适应分辨率的方法

    PyQt5 实现字体大小自适应分辨率的方法

    今天小编就为大家分享一篇PyQt5 实现字体大小自适应分辨率的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python 定时器,实现每天凌晨3点执行的方法

    python 定时器,实现每天凌晨3点执行的方法

    今天小编就为大家分享一篇python 定时器,实现每天凌晨3点执行的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Linux下python3.7.0安装教程

    Linux下python3.7.0安装教程

    这篇文章主要为大家详细介绍了Linux下python3.7.0安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 使用python和pygame制作挡板弹球游戏

    使用python和pygame制作挡板弹球游戏

    这篇文章主要介绍了使用python和pygame制作挡板弹球游戏,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • python 写一个水果忍者游戏

    python 写一个水果忍者游戏

    这篇文章主要介绍了python 如何写一个水果忍者游戏,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • python爬虫可以爬什么

    python爬虫可以爬什么

    在本篇文章里小编给大家整理的是关于python爬虫的作用地方以及相关知识点,需要的朋友们可以学习下。
    2020-06-06
  • 最基础的Python的socket编程入门教程

    最基础的Python的socket编程入门教程

    这篇文章主要介绍了最基础的Python的socket编程入门教程,包括最基本的发送和接受信息等内容,需要的朋友可以参考下
    2015-04-04

最新评论