接口类和抽象类

 1 # java : 面向对象编程
 2 # 设计模式   —— 接口
 3 # 接口类 : python原生不支持
 4 # 抽象类 : python原生支持的
 5 from abc import abstractmethod,ABCMeta
 6 class Payment(metaclass=ABCMeta):  # 元类 默认的元类 type
 7     @abstractmethod
 8     def pay(self,money):pass   # 没有实现这个方法
 9 # 规范 :接口类或者抽象类都可以
10 # 接口类 支持多继承,接口类中的所有的方法都必须不能实现 —— java
11 # 抽象类 不支持多继承,抽象类中方法可以有一些代码的实现 —— java
12 class Wechat(Payment):
13     def pay(self,money):
14         print('已经用微信支付了%s元'%money)
15 
16 class Alipay(Payment):
17     def pay(self,money):
18         print('已经用支付宝支付了%s元' % money)
19 
20 class Applepay(Payment):
21     def pay(self,money):
22         print('已经用applepay支付了%s元' % money)
23 
24 def pay(pay_obj,money):  # 统一支付入口
25     pay_obj.pay(money)
26 
27 # wechat = Wechat()
28 # ali = Alipay()
29 app = Applepay()
30 # wechat.pay(100)
31 # ali.pay(200)
32 p = Payment()

接口类和抽象类是一种标准化开发的思想,源自JAVA。

目的是使一些类都有统一的方法,这样在调用方法时比较方便。

为此,定义一个规范化的父类,父类中定义的方法,要求相关的类必须有父类的同名的方法,所以让子类继承规范化的父类,如果子类中没有同名的方法,当调用此子类中的此方法,就会调用到父类中的此方法,再父类中的此方法中主动抛出一个错误信息,这样可以提醒子类定义此方法。 父类中的此方法不需要写具体内容。

python3中ABC模块中有

abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta):  # 元类 默认的元类 type 元类是创造类用的类(Object是所有类的父类但不是创造其余类的)。此处将元类改为ABCMeta.
  @abstractmethod 
  def pay(self,money):pass # 使用abstractmethod这个装饰器就可以使子类在实例化时,检测子类有无父类中定义的方法,如果没有直接抛出错误信息,不需要再子类调用相关方法时抛出错误,这就是python原生支持的。