Python底层封装实现方法详解


Posted in Python onJanuary 22, 2020

这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

事实上,python封装特性的实现纯属“投机取巧”,之所以类对象无法直接调用私有方法和属性,是因为底层实现时,python偷偷改变了它们的名称。

python在底层实现时,将它们的名称都偷偷改成了"_类名__属性(方法)名"的格式

class Person:
  def setname(self, name):
    if len(name) < 3:
      raise ValueError('名称长度必须大于3!')
    self.__name = name
    
  def getname(self):
    return self.__name
  
  #为name配置setter和getter方法
  name = property(getname, setname)
  
  def setage(self, age):
    if age < 100:
      self.__age = age
    else:
      raise ValueError('年龄必须小于100!')
  
  def getage(self):
    return self.__age
  
  #为age配置getter和setter方法
  age = property(getage, setage)
  
  #定义私有方法
  def __display(self):
    print(self.__name, "今年", self.__age, "岁。")
    
xiaobai = Person()
xiaobai.name = "xiaobai"
xiaobai.age = 20
#直接调用隐藏的display()方法
xiaobai._Person__display()

xiaobai 今年 20 岁。

总结:python类中所有的属性和方法,都是公有的,如果希望python底层修改类属性或者类方法的名称,以此将它们隐藏起来,只需将它们的名称前添加双下划线("__")即可。

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

Python 相关文章推荐
使用Python脚本将绝对url替换为相对url的教程
Apr 24 Python
详解Django中的权限和组以及消息
Jul 23 Python
Python守护线程用法实例
Jun 23 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
Python实现多线程的两种方式分析
Aug 29 Python
python读取几个G的csv文件方法
Jan 07 Python
python实现大转盘抽奖效果
Jan 22 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python 实现将list转成字符串,中间用空格隔开
Dec 25 Python
Django分组聚合查询实例分享
Apr 29 Python
Python基础之元类详解
Apr 29 Python
Python数据处理的三个实用技巧分享
Apr 01 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 #Python
使用tensorboard可视化loss和acc的实例
Jan 21 #Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 #Python
NumPy统计函数的实现方法
Jan 21 #Python
TensorFlow实现打印每一层的输出
Jan 21 #Python
NumPy排序的实现
Jan 21 #Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 #Python
You might like
用ODBC的分页显示
2006/10/09 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
Python greenlet实现原理和使用示例
2014/09/24 Python
Python中itertools模块用法详解
2014/09/25 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
常见的python正则用法实例讲解
2016/06/21 Python
替换python字典中的key值方法
2018/07/06 Python
python的pstuil模块使用方法总结
2019/07/26 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
物业管理计划书
2014/01/10 职场文书
校三好学生主要事迹
2014/01/11 职场文书
考试诚信承诺书
2014/05/23 职场文书
企业党建工作总结2015
2015/05/26 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android