接口类和抽象类
一、接口简述
接口:把所有成员组合起来,用来封装一定功能的集合
二、使用接口的意义
意义:归一化
只要是基于同一个接口实现的类,那么所有的这些类产生的对象在使用时,从用法上来说都一样。
三、归一化
归一化:凡是基于同一个接口实现的类,所有的这些类产生的对象在使用的时候,从用法上来说都一样
归一化的好处:
1、无需关心对象的类是什么,只知道这些对象具备哪些功能即可
2、归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合
四、抽象类
python中没有接口的概念,没有interface关键字,可以使用抽象类完成接口的功能
抽象类:一个特殊的类,只能被继承,不能实例化
注:如果说类是一堆对象中抽取相同的内容而来,那么抽象类就是一堆类中抽取相同的内容而来的
抽象类与普通类的不同之处在于:抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。这一点与接口有点类似,但其实是不同的
四、python实现抽象类
abc模块:
Python有一个模块:ABC,Abstract Base Class(抽象基类),主要定义了基本类和最基本的抽象方法,可以为子类定义共有的API,不需要具体实现。相当于是Java中的接口或者是抽象类。
ABC的使用案例:
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):#定义一个基类,使用装饰器使得子类必须有和基类里面相同的方法
"""
强制规定一个规范,凡是继承我的类中的必须有pay方法,如果没有,实例化对象的时候就会报错
"""
@abstractmethod#
def pay(self):
pass
class Alipay(Payment):
def __init__(self,money):
self.money = money
def pay(self):
print("使用支付宝支付了%s元" % self.money)
class Jdpay(Payment):
def __init__(self,money):
self.money = money
def pay(self):
print("使用京东支付了%s元" % self.money)
class Wechatpay(Payment):
def __init__(self,money):
self.money = money
def pay(self):
print("使用微信支付了%s元" % self.money)
a1 = Alipay(200)
j1 = Jdpay(100)
w1 =Wechatpay(20)
def pay(obj):#定义一个支付接口函数,参数为类的对象
obj.pay()
pay(a1)#统一化接口设置
pay(j1)
pay(w1)
#结果”
"""
使用支付宝支付了200元
使用京东支付了100元
使用微信支付了20元
"""