什么是封装
字面意思 把什么东西装到容器 在封闭起来
与隐藏有相似指出 不是单纯的隐藏
官方解释:对外部隐藏实现细节,并提供简单的使用接口
封装的好处
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模拟接口的问题是不能强制子类必须实现接口的方法
抽象在这里指的是 不具体 不清晰看不懂
如果一个方法没有实现体 那么这个方法就可以称之为抽象方法
反过来说 只要有方法没有实现体 那么这个类就是抽象的
抽象类 也是用来提高扩展性的 与接口相似的是 也可以作为一套规范
比接口强大的地方在于可以强行限制 子类必须实现父类中声明的方法
抽象类无法直接实例化 只能由子类继承之后 覆盖所有的抽象方法才能实例化对象