一般面向对象的编程语言都会区分公有和私有的数据类型,像C++和Java它们使用public和private关键字,用于声明数据是公有的还是私有的,但是在Python中并没有用类似的关键字来修饰。

(顺便说一句:有人在面试阿里时,一面二面很顺利,三面时突然问道Java中public关键字是做什么的?突然蒙~,然后凉凉)

难道Python所有东西都是透明的?也不全是,默认上对象的属性和方法都是公开的,可一直接通过点操作符(.)进行访问:

为了实现类似私有变量的特征,Python内部采用了一种叫name、mangling(名字改编)的技术,在Python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会成为私有的了:

报错是因为我们的访问方式有问题

这样在外部将变量名"隐藏"起来了,理论上如果要访问,就需要从内部进行:

但是你认真琢磨一下这个技术的名字name mangling(名字改编),那就不难发现其实Python只是动了一下手脚,把双下横线开头的变量进行了改名而已。实际上在外部你使用"_类名__变量名"即可访问双下横线开头的私有变量了:

注:Python目前的私有机制其实是伪私有,Python的类是没有权限控制的,所有变量都可以被外部调用的

Python面对对象编程——公有与私有相关推荐

  1. Python面对对象编程——对象、类详解及实例

    Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...

  2. Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解

    1.面向对象的三大特征 封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限; 继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法 ...

  3. python面对对象编程-------5:获取属性的四种办法:@property, __setattr__(__getattr__) ,descriptor...

    一:最基本的属性操作 1 class Generic: 2 pass 3 4 g= Generic() 5 6 >>> g.attribute= "value" ...

  4. python面对对象编程------3:写集合类的三种方法

    写一个集合类的三种方法:wrap,extend,invent 一:包装一个集合类 class Deck: def __init__( self ): self._cards = [card6(r+1, ...

  5. python面对对象编程写一个程序有一个汽车_汽车类面向对象编程Python

    我正在定义一个名为"car"的类,我将它与一个在我的类上运行一系列测试的文档进行比较.然而,我在驱动法中得到了错误的答案,我不知道为什么.在 这是我的密码.驱动方法应该以汽车为参数 ...

  6. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  7. 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性

    一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...

  8. java面对对象编程

    因为这直接关系到你阅读设计模式的速度和理解质量. 接下来我将简单介绍java中面对对象编程的一些基础知识. 1,类和修饰符 public class ClassTest{public ClassTes ...

  9. python遇到对象_### python面对对象小汇总 #####

    python面对对象小汇总 类的起名规则 # 所有的类名要求首字母大写,多个单词使用驼峰式命名法 如 ValueError # 类中方法: 普通方法 类方法 静态方法 魔术方法 class Phone ...

最新文章

  1. 还在魔改Transformer结构吗?微软中山大学开源超强的视觉位置编码,涨点显著
  2. 零基础学Python(第四章 变量类型)
  3. 几个预编译指令的用法
  4. At least one JPA metamodel must be present!
  5. 动态链接库的问题解决
  6. python群发邮箱软件_maily:命令行邮件(批量)发送工具
  7. 英国央行行长:当前的加密货币不太可能取代法定货币
  8. php正则获取html中所有的src,php正则提取html图片(img)src地址与任意属性
  9. IDA远程调试Android中so文件
  10. 破解visio2013记录
  11. Ubuntu18 安装MeshLab软件
  12. python sass_引入sass变量
  13. 大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片
  14. 上传并下载excel表格
  15. Arch Linux fcitx 新世纪五笔配置
  16. QT自制精美Ui模板系列展示(一)桃子风格模板 - 二次开发专用
  17. React学习中的一个小实战(智能社)
  18. 【考研精品词】历年英语真题词汇精析
  19. 介绍一个界面库附防QQ2009教程
  20. Rosetta Stone快照活动总结

热门文章

  1. R语言ggplot2可视化分面直方图(faceting histogram)、使用gghighlight包突出高亮突出每个分面中的一个分组的直方图
  2. 回归分析评估指标均方对数误差(MSLE)详解及其意义:Mean Squared Log Error
  3. python代码打印二叉树某一特定层的节点
  4. 窗口函数(防忘笔记)
  5. 树莓派开发4-串口通讯wiringpi库
  6. 手机 html5评测,三款主流手机浏览器HTML5性能横向评测
  7. go select 与 for 区别_Go 面试每天一篇(第 102 天)
  8. tensorflow keras 上采样(放大图片) tf.keras.layers.UpSampling2D 示例
  9. 十三、冒泡排序算法及其优化
  10. 报错解决:ad NaCl helper startup ack (0 bytes)