• 接口类和抽象类


    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)

     修改名称后不报错了  

     

  • 相关阅读:
    hadoop集群的搭建
    EclipseAndroid打包签名发布安装失败闪退运行不了
    [目录]C#学习笔记
    [目录]搭建一个简单的WebGIS应用程序
    实现DataTables搜索框查询结果高亮显示
    解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误
    将展示内容(div、iframe)放在Expand控件中
    [C#学习笔记1]用csc.exe和记事本写一个C#应用程序
    选中FeatureLayer元素并高亮显示
    在地图中调用显示FeatureLayer并进行render、popupTemplate、添加图例等相关内容的设置
  • 原文地址:https://www.cnblogs.com/taysem/p/12134630.html
Copyright © 2020-2023  润新知