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()方法则实例化失败,会报错
    #想则必须要有
  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/shachengcc1/p/11141197.html
Copyright © 2011-2022 走看看