python抽象类是一个特殊的类,它的特殊在于只能被继承,不能被实例化,就是为了定制一个规范.
为什么要有抽象类:
如果说类是从一大推对象中抽取相同的内容而来,那么抽象类就是从从一大推相同的类容抽取相同的内容而来,内容包含数据属性和函数属性.
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() a2 = Jdpay(200) a2.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): obj.pay() a1 = Alipay(200) a2 = Jdpay(1000) pay(a2) pay(a1) # 相同的支付方法 归一化设计 # 第三版 制定规则,抽象类,接口类 from abc import ABCMeta,abstractclassmethod # 模块 class Payment(metaclass=ABCMeta): # 抽象类(接口类) @abstractclassmethod 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) def pay(obj): obj.pay() a1 = Alipay(300) j1 = Jdpay(500) w1 = Wechatpay(400) pay(w1)