在python中抽象类接口类实际是同一种类,用来制定一种规范
此篇两个重点:
- 支付方式的归一化设计;
- 抽象类接口类制定规范的使用
现有需求:
编写用户用支付宝,京东,微信支付
第一版
# class Alipay:
# def __init__(self,money):
# self.money = money
#
# def pay(self):
# print('使用支付宝支付了%s' %self.money)
#
#
# class Jdpay:
# def __init__(self, money):
# self.money = money
#
# def pay(self):
# print('使用京东支付了%s' % self.money)
#
# # a1 = Alipay(200)
# # a1.pay()
# #
# # j1 = Jdpay(100)
# # j1.pay()
由于第一版中支付实例化时分别调用了不同类的方法,考虑到编程的归一化设计,需要优化
第二版 改进,让你支付的方式一样
# class Alipay:
# def __init__(self,money):
# self.money = money
#
# def pay(self):
# print('使用支付宝支付了%s' %self.money)
#
#
# class Jdpay:
# def __init__(self, money):
# self.money = money
#
# def pay(self):
# print('使用京东支付了%s' % self.money)
#
# def pay(obj): #添加pay函数统一支付入口
# obj.pay()
#
# a1 = Alipay(200)
# j1 = Jdpay(100)
# pay(a1) # 归一化设计
# pay(j1)
第三版,野生程序员来了.......要增加一个微信支付的功能.
此版中微信支付类的支付方法不统一
# class Alipay:
# def __init__(self,money):
# self.money = money
#
# def pay(self):
# print('使用支付宝支付了%s' %self.money)
#
#
# class Jdpay:
# def __init__(self, money):
# self.money = money
#
# def pay(self):
# print('使用京东支付了%s' % self.money)
#
# class Wechatpay:
#
# def __init__(self,money):
# self.money = money
#
# def weixinpay(self): #未统一支付方法名,导致无法调用统一的支付入口pay函数
# print('使用微信支付了%s' % self.money)
#
#
# def pay(obj):
# obj.pay()
#
# a1 = Alipay(200)
# j1 = Jdpay(100)
# pay(a1) # 归一化设计
# pay(j1)
#
# w1 = Wechatpay(300)
# w1.weixinpay()
第四版,发回去重新改,制定规则,抽象类,接口类
#强制制定一个规范,凡是继承Payment的类中必须有pay方法,如果没有,实例化对象就会报错,需要强制子类存在某种方法就在该方法上一行加@abstractmethod
# from abc import ABCMeta,abstractmethod
#
# class Payment(metaclass=ABCMeta): # 抽象类(接口类):
# @abstractmethod
# def pay(self): pass # 制定了一个规范
# #@abstractmethod
# #def func(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)
#
#
# def pay(obj):
# obj.pay()
# w1 = Wechatpay(200)
# a1 = Alipay(200)
# j1 = Jdpay(100)
# pay(a1) # 归一化设计
# pay(j1)
#
# w1 = Wechatpay(300)
# w1.weixinpay()