python-面向对象-抽象类接口类

在python中抽象类接口类实际是同一种类,用来制定一种规范

此篇两个重点:

  1. 支付方式的归一化设计;
  2. 抽象类接口类制定规范的使用

现有需求:
编写用户用支付宝,京东,微信支付

第一版

# 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()
posted @ 2021-09-07 14:25  huandada  阅读(142)  评论(0编辑  收藏  举报