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实现的HTTP并发测试完整示例
Apr 23 Python
python交互式图形编程实例(三)
Nov 17 Python
Python实现修改IE注册表功能示例
May 10 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
python 梯度法求解函数极值的实例
Jul 10 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
python 通过文件夹导入包的操作
Jun 01 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
pycharm + django跨域无提示的解决方法
Dec 06 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
我的论坛源代码(四)
2006/10/09 PHP
PHP 模板高级篇总结
2006/12/21 PHP
php旋转图片90度的方法
2013/11/07 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
js获取class的所有元素
2013/03/28 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
Python yield 使用浅析
2015/05/28 Python
python 爬取微信文章
2016/01/30 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
军训 自我鉴定
2014/02/03 职场文书
银行服务感言
2014/03/01 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
党性分析自查总结
2014/10/14 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书