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实现在pickling的时候压缩的方法
Sep 25 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
基于python检查矩阵计算结果
May 21 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
python用Configobj模块读取配置文件
Sep 26 Python
pytorch Dropout过拟合的操作
May 27 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
php网站被挂木马后的修复方法总结
2014/11/06 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python同步两个文件夹下的内容
2019/08/29 Python
django自带调试服务器的使用详解
2019/08/29 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
Python 如何展开嵌套的序列
2020/08/01 Python
python 如何区分return和yield
2020/09/22 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
python装饰器代码深入讲解
2021/03/01 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
工作自荐信
2013/12/11 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
皇城相府导游词
2015/02/06 职场文书
电力培训学习心得体会
2016/01/11 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python