前言:

Python不能像Java那样使用 private 和 protected 修饰符创建私有属性和受保护的属性,但是Python有个简单的机制,能避免子类意外覆盖“私有”属性。

首先定义一个Dog类:

class Dog:

'Dog class'

def __init__(self, age, sex, mood):

self.age = age

self._sex = sex

self.__mood = mood

一、 受保护的属性:

Python中有个默认的规定,即在属性名前加上单个下划线(_属性名)来表示这是个受保护的属性,虽然Python解释器不会对使用单个下划线前缀的属性名做特殊处理,但程序员们会严格遵守这个约定,不会在类外部访问这种属性。

dog = Dog(3, 'male', 'happy')

print(dog._sex) # male

dog._sex = 'female'

print(dog._sex) # female

可以看到,对于有单个下划线前缀的属性,是可以进行访问和直接修改的,因为Python解释器不会对其进行任何特殊处理。

二、私有属性:

使用两个下划线前缀的属性(两个前导下划线,尾部没有或最多有一个下划线)被称为私有属性,Python会对这种属性先进行特殊处理:在属性名前面加上一个下划线和类名。然后将属性名存入实例的__dict__属性中。

dog = Dog(3, 'male', 'happy')

print(dog.__dict__) # {'age': 3, '_sex': 'male', '_Dog__mood': 'happy'}

print(dog.__mood) # AttributeError: 'Dog' object has no attribute '__mood'

可以看到,这种属性是无法直接访问的,因为它已经被进行了特殊处理,即在属性名前面加上一个下划线和类名。

但是,当先对该属性进行修改,就可以进行访问了,如下所示。原因是该实例绑定了一个名为__mood的属性,与原有_Dog__mood并不冲突。

dog = Dog(3, 'male', 'happy')

print(dog.__dict__) # {'age': 3, '_sex': 'male', '_Dog__mood': 'happy'}

dog.__mood = 'female'

print(dog.__mood) # female

print(dog.__dict__) # {'age': 3, '_sex': 'male', '_Dog__mood': 'happy', '__mood': 'female'}

python属于私有属性_Python私有属性和受保护的属性原理解析相关推荐

  1. python 私有属性_Python 私有属性和私有方法

    类的私有属性和方法 Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有. Python ...

  2. python创建实例属性_Python学习笔记__6.5章 实例属性和类属性

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 1.1.实例绑定属性 class Student(object): def __init__(self, name): self.name ...

  3. python中property魔法方法原理_Python类中的魔法方法之 __slots__原理解析

    在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性,这样非常的有用处,可以使我们任意的去设置新的属性. 每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性,如果 ...

  4. php 公共的 受保护的,php-不使用$this-gt;调用受保护的属性

    我正在读一本关于用PHP创建MVC框架的书.在第二章中,我们构建了一个有点奇怪的类.让我举例说明. 该类称为检查器.以下是属性: protected $_class; protected $_prop ...

  5. python中f点flush是什么函数_Python文件操作及内置函数flush原理解析

    1.打开文件得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例文件 '你好呀' 我是于超 嗯 再见 文件操作基本流程 f=open('chenli',encoding='ut ...

  6. python类的私有属性_Python 的私有属性和‘受保护的’属性

    Python 不能像 java 那样使用 private 修饰符创建私有属性,但是 Python 有个简单的机制,能避免子类意外覆盖'私有'属性. 举个例子,有个人编写了一个名为 dog 的类,这个类 ...

  7. python解析xml读取指定属性_python批量修改xml某些内容和属性

    在训练时,有时候需要将jpg格式转换为png格式,顺便也要把jpg标注的xml文件转换为png的xml文件.例如,需要把xml文件中的图像后缀名".jpg"批量去掉,这时候就需要批 ...

  8. python jieba库下载_Python中jieba库安装步骤及失败原因解析

    Python 中 jieba 库安装步骤及失败原因解析 作为计算机小白, Python 的流行也让我蠢蠢欲动, 在请教计算机 专业同学后,开始上网课自学 Python 基础知识.今天老师简单的一 句话 ...

  9. python安卓开发视频_python开发安卓App实战项目:西瓜视频解析工具

    [Python] 纯文本查看 复制代码import os import base64 from kivy.app import App from kivy.network.urlrequest imp ...

最新文章

  1. ACM第一天研究懂的AC代码——BFS问题解答——习题zoj2165
  2. Python基础09 面向对象的进一步拓展
  3. MVC模式和文档/视图结构
  4. 部署在sae上的servlet程序出现is not a javax.servlet.Servlet 错误
  5. PHP 正在干掉 Python
  6. 【Node学习】—Node.js中模块化开发的规范
  7. P5 周志华:“数据、算法、算力”,人工智能三要素在未来还要加上“知识”
  8. ios微信下vue项目组件切换并自动播放音频的解决方案
  9. TurboFan的故事
  10. NTKO控件使用总结——个人观点总结
  11. 【信号与系统|吴大正】5:离散信号的傅里叶变换
  12. 打印机之——Mac电脑添加打印机
  13. 【综述】A Comprehensive Survey on Graph NeuralNetworks(2)
  14. .click()与on('click',function())
  15. C语言基础题集(课前:一维数组,二维数组)
  16. c语言要使用数学函数,c语言中用到的 数学函数(转)
  17. 图像属性——老照片特效
  18. JAVA面试算法小记
  19. VTS manifest xml
  20. iphone4s改装 linux,iPhone4S降级教程(支持iOS5.1.1)可实现完美越狱

热门文章

  1. falcon框架_如何使用Falcon构建RESTful API
  2. firebase连接不上_如何在Firebase上托管Blazor应用程序
  3. 2017年最喜欢的Visual Studio代码扩展
  4. 147_Power BI Report Server demo演示
  5. python调试神器_python调试神器PySnooper的使用
  6. Error解决:hive中的数组越界异常IndexOutOfBoundsException
  7. 源码分析参考:Scheduler
  8. 腾讯云实验之Linux 基础入门
  9. 《scikit-learn》决策树之鸢尾花分类
  10. 深度学习 《LSTM和GRU模型》