from abc import abstractmethod.ABCmeta

class Payment(mataclass = ABCmeta):  #元类 默认的元类 type

  @abstractmethod

  def pay(self,money):pass

接口类或者抽象类都是为了规范子类,希望在子类中实现和父类方法名字完全一样的方法

python有抽象类,没有接口类,只是一种概念

从java的角度来看,是有区别的:

  java没有多继承,为了接口隔离原则,设计了接口的概念,支持多继承了

  java本来就支持单继承,所以就有了抽象类

  python既支持单继承也支持多继承,所以对抽象类和接口类的区别不是那么明显

  甚至python中没有内置接口类

#接口类 默认多继承,接口类中的方法都必须不能实现——源自java理念

#抽象类 不支持多继承,抽象类中方法可以有一些代码实现——源自java理念

#一般情况下单继承能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现

#多继承的情况下由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中

 

 

#####################################################

 

class Wechat(Payment):

  def pay(self, money):

    print('已使用微信支付了%s元',%money)

 

class Alipay(Payment):

  def pay(self, money):

    print('已使用支付宝支付了%s元',%money)

 

def pay(pay_obj,money):  #统一支付入口

  pay_obj.pay(money)

 

wechat = Wechat()

ali = Alipay()

pay(wechat,1000)

 

#################################################