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中使用中文的方法
Feb 19 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
Python定义函数功能与用法实例详解
Apr 08 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
基于python实现可视化生成二维码工具
Jul 08 Python
最新pycharm安装教程
Nov 18 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
jquery无缝向上滚动实现代码
2013/03/29 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
node.js中watch机制详解
2014/11/17 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
深入浅析python继承问题
2016/05/29 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Pycharm更换python解释器的方法
2018/10/29 Python
如何在Python对Excel进行读取
2020/06/04 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
中专生职业生涯规划书范文
2014/01/10 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
银行委托书范本
2014/04/04 职场文书
中学生家长评语大全
2014/04/16 职场文书
企业文化标语口号
2014/06/09 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
失职检讨书大全
2015/01/26 职场文书
董事长助理岗位职责
2015/02/11 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers