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 相关文章推荐
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
python 标准差计算的实现(std)
Jul 29 Python
Python yield生成器和return对比代码实例
Apr 20 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
keras.layer.input()用法说明
Jun 16 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 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
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
php实现paypal 授权登录
2015/05/28 PHP
php导出生成word的方法
2015/12/25 PHP
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
node.js require() 源码解读
2015/12/13 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python3基础之list列表实例解析
2014/08/13 Python
Python编程之属性和方法实例详解
2015/05/19 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
Python数据正态性检验实现过程
2020/04/18 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
详解python metaclass(元类)
2020/08/13 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
大学生涯自我鉴定
2014/01/16 职场文书
公司员工辞职信范文
2015/05/12 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python