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编程中对文件和存储器的读写示例
Jan 25 Python
Python基础语法(Python基础知识点)
Feb 28 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Python tornado上传文件的功能
Mar 26 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
ASP和PHP都是可以删除自身的
2007/04/09 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
什么是网络协议
2016/04/07 面试题
求职自荐信
2013/12/14 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
撤诉申请怎么写
2015/05/19 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA