什么是封装
字面意思 把什么东西装到容器 在封闭起来
与隐藏有相似指出 不是单纯的隐藏
官方解释:对外部隐藏实现细节,并提供简单的使用接口
封装的好处
1.提高安全性 封装关键数据来实现
2.隔离复杂度 封装一些内部的实现逻辑(方法)来实现
python中属性的访问权限
1.公开的(默认)在任何地方都能访问到
2.私有的 仅在类内部可以使用 外界完全无法使用 那就没有意义
我们可以定义访问方法和设置方法
1.提供对私有属性的访问和修改
2.增加额外的判断逻辑
property装饰器
问题:访问和修改私有属性的写法与普通属性的写法不一致
对使用者而言更复杂
使用property装饰器可以将一个方式伪装成一个普通属性
这样对于使用者而言 使用方法一致了
弊端是方法不能增加额外的参数只能有一个self
@property 用点来访问属性时触发 p1.id_card
设置器
@属性名称.setter 用点来设置属性时触发 p1.id_card = '123456'
删除器
@属性名称.deleter 用del 删除属性时触发 del p1.id_card
使用特殊语法:给要隐藏的变量名称前面加上两个下划线_ 使其变为私有
python是通过变形的方式 来完成使用化操作
具体:把双下划线开头的名字 在名字前添加类名
发生形变操作时在定义阶段就发生了并且只发生一层
总结:默认情况下 子类无论是类内部还是外部时不能访问父类的私有属性的 当然你可以强行访问
场景:一些方法的存在是为了 完成其他功能这些方法不应该提供给外界 例如发动机中的 打火这个功能
当一个方法中的代码太多时 我们需要将其拆分为不同的小函数 这个小函数不应该提供给外界
接口:
interface 接口
是一组功能的结合体
好处:同于提高程序的扩展性
接口用于定义一组功能,后续的程序只要按照接口来实现 就能被使用
例如电脑的usb接口 只要按照usb接口规定来实现 就能被电脑来使用
可以将接口理解为是一套规范
封装的实现原理
抽象类
使用class模拟接口的问题是不能强制子类必须实现接口的方法
抽象在这里指的是 不具体 不清晰看不懂
如果一个方法没有实现体 那么这个方法就可以称之为抽象方法
反过来说 只要有方法没有实现体 那么这个类就是抽象的
抽象类 也是用来提高扩展性的 与接口相似的是 也可以作为一套规范
比接口强大的地方在于可以强行限制 子类必须实现父类中声明的方法
抽象类无法直接实例化 只能由子类继承之后 覆盖所有的抽象方法才能实例化对象
posted on
浙公网安备 33010602011771号