事实上,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 封装底层实现原理相关推荐

  1. python位运算和float浮点型底层存储原理

    一 前言 位运算,一个极容易被低端码农忽视的地带,因为它略微需要用一丢丢智商,真的只有那么一丢丢,但高手与low手的差距往往就是长这么一丢丢,能达到的深度就截然不同了 二 真值.机器数(原码.反码.补 ...

  2. python怎样实现封装_python封装对象实现时间效果

    # 钟表import timeclass Clock(): def __init__(self, hour, minute, second): # 时 分 秒 self.hour = hour sel ...

  3. python数据库操作封装_Python 封装一个操作mysql的类

    import pymysql class MysqlOperation(): def __init__(self, host, user, pwd, port, db): self.host = ho ...

  4. python字典实现原理_Python字典底层实现原理详解

    在Python中,字典是通过散列表或说哈希表实现的.字典也被称为关联数组,还称为哈希数组等.也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值.哈希函数的目的是使键均匀地分布在 ...

  5. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  6. python 取array并集_Python内置数据结构原理与性能简易分析

    ins @ngladc 文末左下方阅读原文指向了本人博客链接,不含广告.参考资料中的相关链接,可以在博客文章的最下方获取.推荐苹果手机用户使用浅色模式观看. 前言 对于一些算法题,可以使用Python ...

  7. python归一化 增大差异_Python逻辑回归模型原理及实际案例应用

    前言 上面我们介绍了线性回归, 岭回归, Lasso回归, 今天我们来看看另外一种模型-"逻辑回归". 虽然它有"回归"一词, 但解决的却是分类问题 目录 1. ...

  8. python抢红包random实现_python写红包的原理流程包含random,lambda其中的使用和见简单介绍...

    Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...

  9. python threading condition使用_Python threading模块condition原理及运行流程详解

    Condition的处理流程如下: 首先acquire一个条件变量,然后判断一些条件. 如果条件不满足则wait: 如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wa ...

最新文章

  1. 用 HAProxy 实现网络流量的负载平衡
  2. bireme数据源同步工具--debezium+kafka+bireme
  3. 实现一个简单的文件上传进度条
  4. Maven项目mybatis Invalid bound statement (not found)解决方法
  5. Mysql的体系结构概览
  6. 【区块链基础知识系列】 第9课 一文诠释什么是DAG
  7. SOFAStack的前世今生
  8. AndroidStudio_安卓原生开发_sharedpreferences清空---Android原生开发工作笔记150
  9. springboot 直接转发调用_java springboot 引用openfeign 接口转发
  10. Backpropagation Algorithm 的梯度
  11. mysql msi失败_MySQL .msi 安装失败改用.zip安装步骤
  12. android锁屏自动清理,安卓手机如何把锁屏自动清理关掉急
  13. 在线卡西欧计算机,卡西欧科学计算器在线
  14. Java定义一个名为Square继承Shape抽象类,覆盖Shape类中的抽象方法getPerimeter()和getArea
  15. vivo x60pro刷机鸿蒙,vivoX60Pro+玩机技巧-有哪些黑科技
  16. win7怎么修改系统语言
  17. 欠债还钱,天经地义: 开发团队如何还技术债?
  18. 文件服务器属于固定资产吗,云服务器属于固定资产吗
  19. 递归算法时间复杂度的数学证明过程(主定理)
  20. Blizzard的MPQ文件格式搜索算法---来自Gameres bbs

热门文章

  1. 计算未来轻沙龙 | AI=知识+推理,知识工程与数据管理专场来了!
  2. “让Keras更酷一些!”:层与模型的重用技巧
  3. 除了超分辨率,AI 结合 RTC 还有哪些技术实践?
  4. 在Android设备部署PyTorch模型
  5. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task3:网络模型结构发展
  6. python知识点总结(有空就往里面添加)
  7. 十大经典排序算法之选择排序及其优化
  8. LeetCode176 第二高的薪水
  9. mysql存储过程中as_Mysql存储过程中的delimiter
  10. 计算机的相关配置信息,win7系统查看电脑配置相关信息的方案介绍