zoukankan      html  css  js  c++  java
  • 类的约束(编程思想)小进阶

    类的约束(编程思想)

    规范化统一

    定义一个父类(pay方法)

    class Payment:
        """
        此类什么都不做,就是制定一个标准,谁继承我,必须定义我里面的方法。
        """
        def pay(self,money):
            raise Exception("你没有实现pay方法")
    
    class QQpay(Payment):
        def pay(self,money):
            print('使用qq支付%s元' % money)
    
    class Alipay(Payment):
        def pay(self,money):
            print('使用阿里支付%s元' % money)
    
    class Wechatpay(Payment):
        def fuqian(self,money):
            print('使用微信支付%s元' % money)
    
    
    def pay(obj,money):
        obj.pay(money)#归一化设计:统一接口 运行放松
    
    a = Alipay()
    b = QQpay()
    c = Wechatpay()
    pay(a,100)#都用pay函数
    pay(b,200)
    pay(c,300)
    

    用一个函数(或者类)进行整合统一接口

    def pay(obj,money)#归一化设计:统一接口 运行放松
    
    obj.pay(money)
    
    obj1=QQpay()
    
    obj2=Alipay()
    
    
    
    pay(obj,100)#都用pay函数
    
    pay(obj2,200)
    

    做到强制约束

    方法1:

    python 语言惯于使用的一种约束方式,在父类主动抛出错误,

    方法一

    前提,你的项目已经上线了,之前完成的qqpay,alipay,以及pay函数这个

    接口都已经成型了 如果此时新添加一个微信支付,其他的py文件引用支付功能pay

    还是直接引用pay, 不使用这个父类的pay继承父类 自定义就会主动报错

    运行延用父类方法时 使用时才报错

    raise

    class Payment

    定义一个强制标准 并不是完全强制 需要调用pay方法的时候才会报错

    raiser Exception('子类需要定义pay方法')#主动抛出异常

    方法2:

    抽象类接口类

    方法2:借鉴于Java语言,定义抽象类概念,做到真正的强制约束

    必须定义一个和父类一样的方法 没定义 实例化对象直接报错

    from abc import ABCMeta,abstractmethod
    class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
        @abstractmethod
        def pay(self):pass  # 抽象方法
    
    class Alipay(Payment):
        def pay(self,money):
            print('使用支付宝支付了%s元'%money)
    
    class QQpay(Payment):
        def pay(self,money):
            print('使用qq支付了%s元'%money)
    
    class Wechatpay(Payment):
        # def pay(self,money):
        #     print('使用微信支付了%s元'%money)
        def recharge(self):pass
    
    def pay(a,money):
        a.pay(money)
    
    a = Alipay()
    a.pay(100)
    pay(a,100)    # 归一化设计:不管是哪一个类的对象,都调用同一个函数去完成相似的功能
    q = QQpay()
    q.pay(100)
    pay(q,100)
    w = Wechatpay()
    pay(w,100)   # 到用的时候才会报错
    
    
    
    # 抽象类和接口类做的事情 :建立规范
    # 制定一个类的metaclass是ABCMeta,
    # 那么这个类就变成了一个抽象类(接口类)
    # 这个类的主要功能就是建立一个规范
    

    总结: 约束. 其实就是⽗类对⼦类进⾏约束. ⼦类必须要写xxx⽅法. 在python中约束的⽅式和⽅法有两种:

    1. 使⽤抽象类和抽象⽅法, 由于该⽅案来源是java和c#. 所以使⽤频率还是很少的

    2. 使⽤⼈为抛出异常的⽅案. 并且尽量抛出的是NotImplementError. 这样比较专业, ⽽且错误比较明确.(推荐)

  • 相关阅读:
    boboJavaScript中innerHTML,innerText,value
    bobo JS中document.write(" ");
    bobo window.location.href
    bobojQuery选择器总结
    bobo jquery attr()方法
    bobowindow.location.hash 属性使用说明
    bobo$(function(){})和$(document).ready(function(){})
    bobo使用jQuery解析JSON数据
    MyBatis实现CRUD操作
    第一个MyBatis程序
  • 原文地址:https://www.cnblogs.com/strawberry-1/p/11321809.html
Copyright © 2011-2022 走看看