Python面对对象编程——公有与私有
一般面向对象的编程语言都会区分公有和私有的数据类型,像C++和Java它们使用public和private关键字,用于声明数据是公有的还是私有的,但是在Python中并没有用类似的关键字来修饰。
(顺便说一句:有人在面试阿里时,一面二面很顺利,三面时突然问道Java中public关键字是做什么的?突然蒙~,然后凉凉)
难道Python所有东西都是透明的?也不全是,默认上对象的属性和方法都是公开的,可一直接通过点操作符(.)进行访问:
为了实现类似私有变量的特征,Python内部采用了一种叫name、mangling(名字改编)的技术,在Python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会成为私有的了:
报错是因为我们的访问方式有问题
这样在外部将变量名"隐藏"起来了,理论上如果要访问,就需要从内部进行:
但是你认真琢磨一下这个技术的名字name mangling(名字改编),那就不难发现其实Python只是动了一下手脚,把双下横线开头的变量进行了改名而已。实际上在外部你使用"_类名__变量名"即可访问双下横线开头的私有变量了:
注:Python目前的私有机制其实是伪私有,Python的类是没有权限控制的,所有变量都可以被外部调用的
Python面对对象编程——公有与私有相关推荐
- Python面对对象编程——对象、类详解及实例
Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...
- Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解
1.面向对象的三大特征 封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限; 继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法 ...
- python面对对象编程-------5:获取属性的四种办法:@property, __setattr__(__getattr__) ,descriptor...
一:最基本的属性操作 1 class Generic: 2 pass 3 4 g= Generic() 5 6 >>> g.attribute= "value" ...
- python面对对象编程------3:写集合类的三种方法
写一个集合类的三种方法:wrap,extend,invent 一:包装一个集合类 class Deck: def __init__( self ): self._cards = [card6(r+1, ...
- python面对对象编程写一个程序有一个汽车_汽车类面向对象编程Python
我正在定义一个名为"car"的类,我将它与一个在我的类上运行一系列测试的文档进行比较.然而,我在驱动法中得到了错误的答案,我不知道为什么.在 这是我的密码.驱动方法应该以汽车为参数 ...
- SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理
SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...
- 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性
一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...
- java面对对象编程
因为这直接关系到你阅读设计模式的速度和理解质量. 接下来我将简单介绍java中面对对象编程的一些基础知识. 1,类和修饰符 public class ClassTest{public ClassTes ...
- python遇到对象_### python面对对象小汇总 #####
python面对对象小汇总 类的起名规则 # 所有的类名要求首字母大写,多个单词使用驼峰式命名法 如 ValueError # 类中方法: 普通方法 类方法 静态方法 魔术方法 class Phone ...
最新文章
- 还在魔改Transformer结构吗?微软中山大学开源超强的视觉位置编码,涨点显著
- 零基础学Python(第四章 变量类型)
- 几个预编译指令的用法
- At least one JPA metamodel must be present!
- 动态链接库的问题解决
- python群发邮箱软件_maily:命令行邮件(批量)发送工具
- 英国央行行长:当前的加密货币不太可能取代法定货币
- php正则获取html中所有的src,php正则提取html图片(img)src地址与任意属性
- IDA远程调试Android中so文件
- 破解visio2013记录
- Ubuntu18 安装MeshLab软件
- python sass_引入sass变量
- 大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片
- 上传并下载excel表格
- Arch Linux fcitx 新世纪五笔配置
- QT自制精美Ui模板系列展示(一)桃子风格模板 - 二次开发专用
- React学习中的一个小实战(智能社)
- 【考研精品词】历年英语真题词汇精析
- 介绍一个界面库附防QQ2009教程
- Rosetta Stone快照活动总结
热门文章
- R语言ggplot2可视化分面直方图(faceting histogram)、使用gghighlight包突出高亮突出每个分面中的一个分组的直方图
- 回归分析评估指标均方对数误差(MSLE)详解及其意义:Mean Squared Log Error
- python代码打印二叉树某一特定层的节点
- 窗口函数(防忘笔记)
- 树莓派开发4-串口通讯wiringpi库
- 手机 html5评测,三款主流手机浏览器HTML5性能横向评测
- go select 与 for 区别_Go 面试每天一篇(第 102 天)
- tensorflow keras 上采样(放大图片) tf.keras.layers.UpSampling2D 示例
- 十三、冒泡排序算法及其优化
- 报错解决:ad NaCl helper startup ack (0 bytes)