python怎样实现封装_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 封装底层实现原理相关推荐
- python位运算和float浮点型底层存储原理
一 前言 位运算,一个极容易被低端码农忽视的地带,因为它略微需要用一丢丢智商,真的只有那么一丢丢,但高手与low手的差距往往就是长这么一丢丢,能达到的深度就截然不同了 二 真值.机器数(原码.反码.补 ...
- python怎样实现封装_python封装对象实现时间效果
# 钟表import timeclass Clock(): def __init__(self, hour, minute, second): # 时 分 秒 self.hour = hour sel ...
- python数据库操作封装_Python 封装一个操作mysql的类
import pymysql class MysqlOperation(): def __init__(self, host, user, pwd, port, db): self.host = ho ...
- python字典实现原理_Python字典底层实现原理详解
在Python中,字典是通过散列表或说哈希表实现的.字典也被称为关联数组,还称为哈希数组等.也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值.哈希函数的目的是使键均匀地分布在 ...
- python面向对象三大特性_Python面向对象之多态原理与用法案例分析
本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...
- python 取array并集_Python内置数据结构原理与性能简易分析
ins @ngladc 文末左下方阅读原文指向了本人博客链接,不含广告.参考资料中的相关链接,可以在博客文章的最下方获取.推荐苹果手机用户使用浅色模式观看. 前言 对于一些算法题,可以使用Python ...
- python归一化 增大差异_Python逻辑回归模型原理及实际案例应用
前言 上面我们介绍了线性回归, 岭回归, Lasso回归, 今天我们来看看另外一种模型-"逻辑回归". 虽然它有"回归"一词, 但解决的却是分类问题 目录 1. ...
- python抢红包random实现_python写红包的原理流程包含random,lambda其中的使用和见简单介绍...
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
- python threading condition使用_Python threading模块condition原理及运行流程详解
Condition的处理流程如下: 首先acquire一个条件变量,然后判断一些条件. 如果条件不满足则wait: 如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wa ...
最新文章
- 用 HAProxy 实现网络流量的负载平衡
- bireme数据源同步工具--debezium+kafka+bireme
- 实现一个简单的文件上传进度条
- Maven项目mybatis Invalid bound statement (not found)解决方法
- Mysql的体系结构概览
- 【区块链基础知识系列】 第9课 一文诠释什么是DAG
- SOFAStack的前世今生
- AndroidStudio_安卓原生开发_sharedpreferences清空---Android原生开发工作笔记150
- springboot 直接转发调用_java springboot 引用openfeign 接口转发
- Backpropagation Algorithm 的梯度
- mysql msi失败_MySQL .msi 安装失败改用.zip安装步骤
- android锁屏自动清理,安卓手机如何把锁屏自动清理关掉急
- 在线卡西欧计算机,卡西欧科学计算器在线
- Java定义一个名为Square继承Shape抽象类,覆盖Shape类中的抽象方法getPerimeter()和getArea
- vivo x60pro刷机鸿蒙,vivoX60Pro+玩机技巧-有哪些黑科技
- win7怎么修改系统语言
- 欠债还钱,天经地义: 开发团队如何还技术债?
- 文件服务器属于固定资产吗,云服务器属于固定资产吗
- 递归算法时间复杂度的数学证明过程(主定理)
- Blizzard的MPQ文件格式搜索算法---来自Gameres bbs
热门文章
- 计算未来轻沙龙 | AI=知识+推理,知识工程与数据管理专场来了!
- “让Keras更酷一些!”:层与模型的重用技巧
- 除了超分辨率,AI 结合 RTC 还有哪些技术实践?
- 在Android设备部署PyTorch模型
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task3:网络模型结构发展
- python知识点总结(有空就往里面添加)
- 十大经典排序算法之选择排序及其优化
- LeetCode176 第二高的薪水
- mysql存储过程中as_Mysql存储过程中的delimiter
- 计算机的相关配置信息,win7系统查看电脑配置相关信息的方案介绍