python中的接口类的单继承

python中的接口类的单继承

1.例如实现两个支付方式微信支付和支付宝支付

class wechatpay(Payment):
    def pay(self,money):
        print('使用微信付了%s的钱'%(money))
class alipay(Payment):
    def pay(self,money):
        print('使用支付宝付了%s的钱'%(money))

wechat = wechatpay() #实例化
wechat.pay(200)      #调用对象里面的pay方法
ali = alipay()       #实例化
ali.pay(300)         #调用对象里面的pay方法

2.现在想用一个方法就能实现上面的调用

class wechatpay(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) #这样就可以直接把对象传入pay方法里面然后再调用对象的pay方法
wechat = wechatpay() #实例化
#wechat.pay(200)      #调用对象里面的pay方法
ali = alipay()       #实例化
#ali.pay(300)         #调用对象里面的pay方法
pay(wechat,200)
pay(ali,300)
#这样调用的时候只用调用pay方法然后将实例化的对象传进去就行了

3.现在想加一个applepay的支付方式,如果代码不规范类里面的方法不是pay(),这样再直接调用我们定义的pay()是不是就会直接出问题。

class wechatpay(Payment):
    def pay(self,money):
        print('使用微信付了%s的钱'%(money))
class alipay(Payment):
    def pay(self,money):
        print('使用支付宝付了%s的钱'%(money))
       
class Applepay(Payment):
     def fuqian(self,money):
    # def pay(self,money):  #定义pay方法
        print('使用applepay付了%s的钱' % (money))
def pay(pay_obj,money):
	pay_obj.pay(money) #这样就可以直接把对象传入pay方法里面然后再调用对象的pay方法
apple = applepay() #实例化
pay(apple,300) #这样就会直接报错 因为applepay里面没有定义pay()方法,

上面的代码就会直接报错 因为Applepay里面没有定义pay()方法,如果是一个新来的人没有接触过以前的代码他是不会知道到的,所以我们可以定义一个父类来进行继承,当写的子类中没有要定义的方法,就报一个固定的错误来进行提醒,看下面的代码

class Payment:     #定义的父类
    def pay(self,money):
        raise NotImplemented  #当子类中没有pay方法的时候,在调用的时候主动直接报相应的错误
class wechatpay(Payment):
    def pay(self,money):
        print('使用微信付了%s的钱'%(money))
class alipay(Payment):
    def pay(self,money):
        print('使用支付宝付了%s的钱'%(money))
class applepay(Payment):
    def fuqian(self,money):
    # def pay(self,money):
        print('使用applepay付了%s的钱' % (money))
      
apple = applepay() #实例化
pay(apple,300) #这样就会直接报错NotImplemented 因为applepay里面没有定义pay()方法,

3.python中的接口类的单继承来进行代码规范

from abc import abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta):  # 元类 默认的元类 type
    @abstractmethod
    def pay(self,money):pass   # 没有实现这个方法
# 规范 :接口类或者抽象类都可以
# 接口类 支持多继承,接口类中的所有的方法都必须不能实现 —— java
# 抽象类 不支持多继承,抽象类中方法可以有一些代码的实现 —— java
class Wechat(Payment):
    def pay(self,money):
        print('已经用微信支付了%s元'%money)

class Alipay(Payment):
    def pay(self,money):
        print('已经用支付宝支付了%s元' % money)

class Applepay(Payment):
    def pay(self,money):
        print('已经用applepay支付了%s元' % money)

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

# wechat = Wechat()
# ali = Alipay()
app = Applepay()
# wechat.pay(100)
# ali.pay(200)
p = Payment()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值