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的Flask框架实现视频的流媒体传输
Mar 31 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
python模块简介之有序字典(OrderedDict)
Dec 01 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
pymysql 开启调试模式的实现
Sep 24 Python
python 实现dict转json并保存文件
Dec 05 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
学习python需要有编程基础吗
Jun 02 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
使用tkinter实现三子棋游戏
Feb 25 Python
Python爬取科目四考试题库的方法实现
Mar 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无限分类的类
2007/01/02 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python 操作MySQL详解及实例
2017/04/30 Python
详解python里的命名规范
2018/07/16 Python
Python 处理图片像素点的实例
2019/01/08 Python
python 实现dict转json并保存文件
2019/12/05 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
创建卫生先进单位实施方案
2014/03/10 职场文书
中式婚礼主持词
2014/03/13 职场文书
酒会邀请函
2015/01/31 职场文书
街道社区活动报告
2015/02/05 职场文书
青涩记忆观后感
2015/06/18 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python