• 接口类和抽象类


    Java  面向对象编程的

    设计模式  -----接口

    接口类:  python原生是不支持的  

    抽象类  python 原生支持的

    例如现在有 两个支付方式WeChat 支付和alipay   

    class Wechat:
        def pay(self,money):
            print ('微信支付%s' %money)
    
    
    class Alipay:
        def zhifu(self,money):
            print ('支付宝支付%s' %money)
    
    wechat = Wechat()
    alipay = Alipay()
    
    wechat.pay()

    调用方法后是用支付, 每次都要使用创建不同的对象很 麻烦  现在统一接口后如下, 只需要选择不同对象

    class Wechat:
        def pay(self,money):
            print ('微信支付%s' %money)
    
    
    class Alipay:
        def zhifu(self,money):
            print ('支付宝支付%s' %money)
    
    
    class applePay:
        def zhifu(self,money):
            print ('applepay支付%s' % money)
    
    #统一支付接口
    def pay(pay_obj,money):
        pay_obj.pay(money)
    
    wechat = Wechat()
    alipay = Alipay()
    pay(wechat,100)
    

     

    现在来了一个 新的程序员需要  写一个applepay   但是他没有用pay 方法而是使用了  zhifu这个方法

    class Wechat:
        def pay(self,money):
            print ('微信支付%s' %money)
    
    
    class Alipay:
        def zhifu(self,money):
            print ('支付宝支付%s' %money)
    
    #新家的applePay
    class applePay(Payment):
        def zhifu(self,money):
            print ('applepay支付%s' % money)
    
    #统一支付接口
    def pay(pay_obj,money):
        pay_obj.pay(money)
    
    wechat = Wechat()
    alipay = Alipay()
    app = applePay()

     但是调用 pay(app,20) 会报错,  没有这个pay方法  使用的是 zhifu  这个方法

    为了很好的解决问题使用如下的方式  创建一个父类继承Payment():  没有 这个方法的时候调用父类中的 方法 直接抛出一错误 , 很容易看出  没有这个方法   方便检查   

    from abc import abstractmethod,ABCMeta      abc 这个模块为内置模块可用来更好的检测, 不用也没关系
    from abc import abstractmethod,ABCMeta
    
    class Payment(metaclass=ABCMeta):
    @abstractmethod def pay(self,money): raise NotImplemented #没有实现此方法 class Wechat(Payment): def pay(self,money): print ('微信支付%s' %money) class Alipay(Payment): def zhifu(self,money): print ('支付宝支付%s' %money) class applePay(Payment): def zhifu(self,money): print ('applepay支付%s' % money) #统一支付接口 def pay(pay_obj,money): pay_obj.pay(money) wechat = Wechat() alipay = Alipay() app = applePay() pay(wechat,100) pay(app,20)

     修改名称后不报错了  

     

  • 相关阅读:
    第一章 经济基础知识
    105_实例
    SQL开窗函数
    Docker教程:Docker入门实践
    102_HDFS分布式文件系统
    [转]远程连接出现身份验证错误,要求的函数不受支持
    flutter创建工程指定iOS及Android开发语言
    架构师学习之路:康威定律
    智能识别客户收货地址信息
    深入理解Apache Dubbo与实战 pdf
  • 原文地址:https://www.cnblogs.com/taysem/p/12134630.html
Copyright © 2020-2023  润新知