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)
#################################################