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中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
transform python环境快速配置方法
Sep 27 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
python验证码图片处理(二值化)
Nov 01 Python
详解Django admin高级用法
Nov 06 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
python百行代码实现汉服圈图片爬取
Nov 23 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检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
python和C语言混合编程实例
2014/06/04 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python2.7安装图文教程
2018/03/13 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
详解Python locals()的陷阱
2019/03/26 Python
Python中dict和set的用法讲解
2019/03/28 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
pytorch梯度剪裁方式
2020/02/04 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
python 实现控制鼠标键盘
2020/11/27 Python
《花瓣飘香》教学反思
2014/04/15 职场文书
食品安全宣传标语
2014/06/07 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
2014年安全员工作总结
2014/11/13 职场文书
护士年终考核评语
2014/12/31 职场文书
送达通知书
2015/04/25 职场文书
担保书格式范文
2015/09/22 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书