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类定义和类继承详解
May 08 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 Python
Pandas加速代码之避免使用for循环
May 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
PHP系统流量分析的程序
2006/10/09 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
农历与西历对照
2006/09/06 Javascript
JavaScript的eval JSON object问题
2009/11/15 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
js实现分割上传大文件
2016/03/09 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
angular2实现统一的http请求头方法
2018/08/13 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
python字典多条件排序方法实例
2014/06/30 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
财务会计专业个人求职信范本
2014/01/08 职场文书
班级德育工作实施方案
2014/02/21 职场文书
预备党员表决心书
2014/03/11 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
离婚起诉书范本
2015/05/18 职场文书
初中生物教学反思
2016/02/20 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
Go 中的空白标识符下划线
2022/03/25 Golang
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏