接口类

继承有两种用途:

一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)  

二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能

  1 # 一:这样不好,我要统一一下支付的规则.
  2 
  3 class QQpay:
  4     def pay(self,money):
  5         print('使用qq支付%s元' % money)
  6 
  7 class Alipay:
  8     def pay(self,money):
  9         print('使用阿里支付%s元' % money)
 10 
 11 a = Alipay()
 12 a.pay(100)
 13 
 14 b = QQpay()
 15 b.pay(200)
 16 
 17 # 二,统一支付的规则 归一化设计,统一 pay接口
 18 class QQpay:
 19     def pay(self,money):
 20         print('使用qq支付%s元' % money)
 21 
 22 class Alipay:
 23     def pay(self,money):
 24         print('使用阿里支付%s元' % money)
 25 
 26 def pay(obj,money):
 27     obj.pay(money)
 28 
 29 a = Alipay()
 30 b = QQpay()
 31 
 32 pay(a,100)
 33 pay(b,200)
 34 
 35 # 三,但是,来了一个野生程序员,他不知道你的约定俗成的规则,就会出问题
 36 
 37 class QQpay:
 38     def pay(self,money):
 39         print('使用qq支付%s元' % money)
 40 
 41 class Alipay:
 42     def pay(self,money):
 43         print('使用阿里支付%s元' % money)
 44 
 45 class Wechatpay:
 46     def fuqian(self,money):
 47         print('使用微信支付%s元' % money)
 48 
 49 def pay(obj,money):
 50     obj.pay(money)
 51 
 52 a = Alipay()
 53 b = QQpay()
 54 
 55 pay(a,100)
 56 pay(b,200)
 57 
 58 c = Wechatpay()
 59 c.fuqian(300)
 60 
 61 # 四,解决方式
 62 # 定义一个父类,什么都不写,只是要求继承我的所有类有一个pay方法,这样就制定了一个规范,这就叫做接口类,后者抽象类.
 63 class Payment:
 64     def pay(self):pass
 65 
 66 class QQpay(Payment):
 67     def pay(self,money):
 68         print('使用qq支付%s元' % money)
 69 
 70 class Alipay(Payment):
 71     def pay(self,money):
 72         print('使用阿里支付%s元' % money)
 73 
 74 class Wechatpay(Payment):
 75     def fuqian(self,money):
 76         print('使用微信支付%s元' % money)
 77 
 78 
 79 def pay(obj,money):
 80     obj.pay(money)
 81 
 82 a = Alipay()
 83 b = QQpay()
 84 
 85 pay(a,100)
 86 pay(b,200)
 87 
 88 c = Wechatpay()
 89 c.fuqian(300)
 90 
 91 #五,他还是不知道看你这些都继承了一个类,所以你要制定一个规范,强制他执行.
 92 # 创建一个规范
 93 from abc import ABCMeta,abstractmethod
 94 class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
 95     @abstractmethod
 96     def pay(self):pass  # 抽象方法
 97 
 98 class Alipay(Payment):
 99     def pay(self,money):
100         print('使用支付宝支付了%s元'%money)
101 
102 class QQpay(Payment):
103     def pay(self,money):
104         print('使用qq支付了%s元'%money)
105 
106 class Wechatpay(Payment):
107     # def pay(self,money):
108     #     print('使用微信支付了%s元'%money)
109     def recharge(self):pass
110 
111 def pay(a,money):
112     a.pay(money)
113 
114 a = Alipay()
115 a.pay(100)
116 pay(a,100)    # 归一化设计:不管是哪一个类的对象,都调用同一个函数去完成相似的功能
117 q = QQpay()
118 q.pay(100)
119 pay(q,100)
120 w = Wechatpay()
121 pay(w,100)   # 到用的时候才会报错
122 
123 
124 
125 # 抽象类和接口类做的事情 :建立规范
126 # 制定一个类的metaclass是ABCMeta,
127 # 那么这个类就变成了一个抽象类(接口类)
128 # 这个类的主要功能就是建立一个规范
129 
130 接口类示例
View Code

相关文章: