• 类的约束


    1. 目的是对类进行一些正确的引导、约束和统一规范,满足正确的开发方式。以下所有示例循序渐进,可借此深入了解类的约束的形成过程
    2. 假设一个项目中有支付宝和 QQ 这两种支付方式
    class Alipay:
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class QQpay:
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    a = Alipay()
    a.pay(100)      # 此次消费100元
    
    q = QQpay()
    q.pay(200)      # 此次消费200元

    3. 现在要统一支付功能,可以这样做

    class Alipay:
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    class QQpay:
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    # 设计一个接口
    def pay(obj, money):
        obj.pay(money)
    
    # 实例化两种支付方式的类的对象
    a1 = Alipay()
    a2 = Alipay()
    q = QQpay()
    
    # 直接通过统一的支付接口 (即 pay()) 来调用两种支付方式
    pay(a1, 100)
    pay(q, 100)
    pay(a2, 300)

    4. 假设另一个程序员添加了一个微信支付接口,但是并没有使用统一的支付标准

    class Alipay:
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class QQpay:
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class Wechat:
        # 不规范的写法,支付方法名变了
        def another_pay(self, money):
            print("此次消费%s元" % money)
    
    # 这是一个隐藏的标准 
    def pay(obj, money):
        obj.pay(money)
    
    w = Wechat()
    w.another_pay(300)

    5. 制定一个统一的约束或标准,如果有父类,父类的方法只有一个 pass。其实就是制定了一个规范,表明子类一定要有 pay() 方法

    class A:
    
        def pay(self, money):
            pass
    
    
    class Alipay(A):
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class QQpay(A):
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class Wechatpay(A):
    
        def another_pay(self, money):
            print("此次消费%s元" % money)
    
    
    def pay(obj, money):
        obj.pay(money)
    
    w1 = Wechatpay()
    pay(w1, 100)
    # w1 是类 Wechatpay 的一个实例化对象
    # 当执行 pay(u1, 100) 时,类 Wechatpay 是没有 pay() 的
    # 但是其父类 A 中有 pay(),只不过该方法里面只有 pass

    6. 上面的示例也从侧面说明类 A 不是强制性约束,为了起到决定性的作用,可以强制加一个约束,只要不按规则走就直接报错

    class A:
    
        # 如果子类没有定义这个方法,使用了父类的就报错
        def pay(self, money):
            raise Exception("该支付方式未定义pay方法")
    
    
    class Alipay(A):
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class QQpay(A):
    
        def pay(self, money):
            print("此次消费%s元" % money)
    
    
    class Wechatpay(A):
    
        def another_pay(self, money):
            print("此次消费%s元" % money)
    
    
    def pay(obj, money):
        obj.pay(money)
    
    
    w1 = Wechatpay()
    pay(w1, 100)
    # 运行结果:
    Traceback (most recent call last):
      File "test01.py", line 31, in <module>
        pay(w1, 100)
      File "test01.py", line 27, in pay
        obj.pay(money)
      File "test01.py", line 5, in pay
        raise Exception("该支付方式未定义pay方法")
    Exception: 该支付方式未定义pay方法

    7. 约束,其实就是父类对子类进行约束,子类必须要有某个方法。

  • 相关阅读:
    WeX5那些坑
    项目总结-微信公众平台Html5
    项目总结-APP中的HTML5
    夜幕团队成员的工资究竟几 K ?
    Docker竟然还能这么玩?商业级4G代理搭建实战!
    今天,大佬云集的夜幕团队正式成立了!
    InnoDB物理行中null值的存储的推断与验证
    探究InnoDB数据页内部行的存储方式
    DAO模式
    JDBC
  • 原文地址:https://www.cnblogs.com/fat-girl-spring/p/14900234.html
Copyright © 2020-2023  润新知