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