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

    接口类(抽象类):

    在python中是没有接口类,可以把接口类和抽象类视为同一种
    定义:制定一个规范
    举例:收到项目经理的要求,写一个支付:

    #第一版
    class Alipay:
        def __init__(self,money):
            self.money = money
    
        def pay(self):
            print('zfb支付了%s' % self.money)
    
    
    class Jd:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('jd支付了%s' % self.money)
    
    a1 = Alipay(200)a1.pay()a2 = Jd(100)a2.pay()
    #第二版,改进:使支付的方法一样
    class Alipay:
        def __init__(self,money):
            self.money = money
    
        def pay(self):
            print('zfb支付了%s' % self.money)
    class Jd:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('jd支付了%s' % self.money)
    def pay(obj):
        obj.pay()
    
    a1 = Alipay(200)
    j1 = Jd(100)
    pay(a1)     #把a1这个方法传给了pay()这个函数,通过其统一寻找访问函数体里的内容
                    #归一化设计,可维护性提高

    最后定义的pay()函数是在类之外的,每次把括号内的对象代入函数代码块中,

    代码块内容里调用pay()方法是先寻找本类,再寻找父类内.

    由于两个类中都有相同的pay()方法,通过这个外部的函数就可以实现统一的操作调用.

    #第三版  来了一个野生程序员,增加一个微信支付的功能
    class Alipay:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('zfb支付了%s' % self.money)
    
    
    class Jd:
        def __init__(self, money):
            self.money = money
    
        def pay(self):
            print('jd支付了%s' % self.money)
    
    class Wechatpay:
        def __init__(self, money):
            self.money = money
        def weixinpay(self):
            print('wx支付了%s' % self.money)
    
    def pay(obj):
        obj.pay()
    #
    # w1 = Wechatpay(300)
    # w1.weixinpay()   #此人新定义的类中没有与前两个类相同的pay()方法,无法实现所有类的归一化操作
    第四版  发回去重写,制定一个规则(抽象类,接口类)

    from abc import ABCMeta,abstractmethod
    #强制执行这个接口类

    class Payment(metaclass=ABCMeta): #被所有的子类继承,抽象类,接口类
    @abstractmethod #装饰器
    def pay(self):
    pass #制定了一个规范,要求所有继承我的子类都必须要有一个pay()方法,无则在实例化的时候报错
    #重要的方法名,内容不需要有

    class Alipay(Payment):
    def __init__(self, money):
    self.money = money

    def pay(self):
    print('zfb支付了%s' % self.money)


    class Jd(Payment):
    def __init__(self, money):
    self.money = money

    def pay(self):
    print('jd支付了%s' % self.money)


    class Wechatpay(Payment):
    def __init__(self, money):
    self.money = money

    def pay(self):
    print('wx支付了%s' % self.money)


    def pay(obj):
    obj.pay()

    w1 = Wechatpay(300) #此时,若这个类中没有pay()方法则实例化失败,会报错
    #想则必须要有
  • 相关阅读:
    SQL Server 中WITH (NOLOCK)浅析
    C#中Monitor对象与Lock关键字的区别分析
    lock,Monitor,Mutex的区别
    如何在windows7中使用“专用字符编辑器”中的字
    ppapi,npapi
    配置OpenLDAP,Java操作LDAP,DBC-LDAP进访问
    List of Mozilla-Based Applications
    TLS协议分析
    编译Chrome详细步骤
    黑客惯用软件
  • 原文地址:https://www.cnblogs.com/shachengcc1/p/11141197.html
Copyright © 2011-2022 走看看