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 set常用操作函数集锦
Nov 15 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
浅谈python中get pass用法
Mar 19 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
python 利用zmail库发送邮件
Sep 11 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
js 对小数加法精度处理示例说明
2013/12/27 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
Vue基础配置讲解
2019/11/29 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python unittest模块用法实例分析
2018/05/25 Python
Python操作MySQL数据库的方法
2018/06/20 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
python打造爬虫代理池过程解析
2019/08/15 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
Python接口测试文件上传实例解析
2020/05/22 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
小学防溺水制度
2014/01/29 职场文书
消防安全责任书
2014/04/14 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
实习单位指导教师评语
2014/12/30 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript