zoukankan      html  css  js  c++  java
  • 接口类和抽象类

    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)

     修改名称后不报错了  

     

  • 相关阅读:
    sqlserver跨数据库查询数据
    sqlserver调用钉钉方法
    SQL Server判断对象是否存在
    再学一次C#(基本类型篇)
    .net core部署到centos官方文档的一点小问题
    C#字符串和byte之间的互相转化(转载出自:https://www.cnblogs.com/liangxiaoking/p/5958456.html)
    30分钟通过Kong实现.NET网关
    Envoy实现.NET架构的网关(五)集成Redis实现限流
    Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证
    Envoy实现.NET架构的网关(三)代理GRPC
  • 原文地址:https://www.cnblogs.com/taysem/p/12134630.html
Copyright © 2011-2022 走看看