接口是一组功能的集合,可是接口中仅包含功能的名字,不包含具体的实现代码
接口本质是一套协议标准,遵循这个标准的对象就能被调用python
为了提升扩展性
例如电脑提早指定制定一套USB接口协议,只要你遵循该协议,你的设备就能够被电脑使用,不须要关心究竟是鼠标仍是键盘
封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。经过任何客户端直接对数据的访问,无视接口,与封装性都是背道而驰的,除非程序员容许这些操做。做为实现的 一部分,客户端根本就不须要知道在封装以后,数据属性是如何组织的。在Python中,全部的类属性都是公开的,但名字可能被“混淆”了,以阻止未经受权的访问,但仅此而已,再没有其余预防措施了。这就须要在设计时,对数据提供相应的接口,以避免客户程序经过不规范的操做来存取封装的数据属性。
注意:封装毫不是等于“把不想让别人看到、之后可能修改的东西用private隐藏起来”
真正的封装是,通过深刻的思考,作出良好的抽象,给出“完整且最小”的接口,并使得内部细节能够对外透明
(注意:对外透明的意思是,外部调用者能够顺利的获得本身想要的任何功能,彻底意识不到内部细节的存在)程序员
上代码函数
class USB: def open(self): pass def close(self): pass def read(self): pass def write(self): pass class Mouse(USB): def open(self): print("鼠标开机.....") def close(self): print("鼠标关机了...") def read(self): print("获取了光标位置....") def write(self): print("鼠标不支持写入....") def pc(usb_device): usb_device.open() usb_device.read() usb_device.write() usb_device.close() m = Mouse() # 将鼠标传给电脑 pc(m) class KeyBoard(USB): def open(self): print("键盘开机.....") def close(self): print("键盘关机了...") def read(self): print("获取了按键字符....") def write(self): print("能够写入灯光颜色....") # 来了一个键盘对象 k = KeyBoard() pc(k)
在上述案例中,PC的代码一旦完成,后期不管什么样的设备 只要遵循了USB接口协议,都可以被电脑所调用学习
接口主要是方便了对象的使用者,下降使用者的 学习难度,只要学习一套使用方法,就能够以不变应万变设计
问题:code
若是子类没有按照你的协议来设计,也没办法限制他,将致使代码没法运行
就能够用到定义抽象类的方法来实现对子类的方法的限定!!!!!!!对象
指的是包含抽象方法(没有函数体的方法)的类接口
能够限制子类必须类中定义的抽象方法it
代码走你class
class Mouse: def open(self): print("鼠标开机.....") def close(self): print("鼠标关机了...") def read(self): print("获取了光标位置....") def write(self): print("鼠标不支持写入....") def pc(usb_device): usb_device.open() usb_device.read() usb_device.write() usb_device.close() m = Mouse() # 将鼠标传给电脑 pc(m) class KeyBoard: def open(self): print("键盘开机.....") def close(self): print("键盘关机了...") def read(self): print("获取了按键字符....") def write(self): print("能够写入灯光颜色....") # 来了一个键盘对象 k = KeyBoard() pc(k) class UDisk: def open(self): print("U盘启动了...") def close(self): print("U盘关闭了...") def read(self): print("读出数据") def write(self): print("写入数据") u = UDisk() pc(u)
接口是一套协议规范,明确子类们应该具有哪些功能
抽象类是用于强制要求子类必须按照协议中规定的来实现
然而,python不推崇限制你的语法, 咱们能够设计成鸭子类型,既让多个不一样类对象具有相同的属性和方法
对于使用者而言,就能够以不变应万变,轻松的使用各类对象
python通常不会限制你必须怎么写,做为一个优秀的程序员,就应该自觉遵照相关协议 因此有了鸭子类型这么一说: 若是这个对象长得像鸭子,走路像鸭子,那就他是鸭子 你只要保证你的类按照相关的协议类编写,也能够达到提升扩展性的目的