python面向对象进阶-09接口和抽象类

接口

接口是一组功能的集合,可是接口中仅包含功能的名字,不包含具体的实现代码
接口本质是一套协议标准,遵循这个标准的对象就能被调用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通常不会限制你必须怎么写,做为一个优秀的程序员,就应该自觉遵照相关协议 因此有了鸭子类型这么一说: 若是这个对象长得像鸭子,走路像鸭子,那就他是鸭子 你只要保证你的类按照相关的协议类编写,也能够达到提升扩展性的目的

相关文章
相关标签/搜索