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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
python中metaclass原理与用法详解
Jun 25 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python3代码中实现加法重载的实例
Dec 03 Python
只用Python就可以制作的简单词云
Jun 07 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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
ftp类(myftp.php)
2006/10/09 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
用jquery存取照片的具体实现方法
2013/06/30 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
找到不普通的东西:Bonanza
2016/10/20 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
党员带头倡议书
2015/04/29 职场文书
初中思品教学反思
2016/02/20 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
python基础之类方法和静态方法
2021/10/24 Python
python+opencv实现目标跟踪过程
2022/06/21 Python