• python面向对象类的约束和设计的统一化规范


    .封装

    • 定义:将一些东西内容封存到一个地方,你还可以再取出,
      • 类设置静态属性,设置一些方法
      • 对象可以在其对象空间中封装一些属性

    2.多态

    • 定义:一个事物的多种形态
      • 就想a可以是一个字符串,可以是一个列表等等,不像Java中定义时必须声明变量类型
      • Python默认支持多态

    3.鸭子类型

    • Python中你看起来像鸭子,那么你就是鸭子

    • 统一化规范

      • 例子:支付统一使用同一个接口

        # class QQpay:
        #     def pay(self, money):
        #         print(f'利用qq支付了{money}')
        # class Alipay:
        #     def pay(self, money):
        #         print(f'利用支付宝支付了{money}')
        # 支付功能 规划一下
        # def pay(obj,money):  # 归一化设计
        #     obj.pay(money)
        # obj1 = QQpay()
        # obj2 = Alipay()
        # pay(obj1,100)
        # pay(obj2,200)
        

    4.约束

    • 让具有同一功能的类拥有同一个基类,在基类中对子类进行提示性约束和强制性约束

      • 提示性约束

        • class Payment:
          #     def pay(self,money):  # 约定俗称定义一种规范,子类要定义pay方法.
          #         raise Exception('子类必须定义此方法')
          
          # class QQpay(Payment):
          #
          #     def pay(self, money):
          #         print(f'利用qq支付了{money}')
          #
          #
          # class Alipay(Payment):
          #
          #     def pay(self, money):
          #         print(f'利用支付宝支付了{money}')
          #
          # # class Wechatpay(Payment):
          # #     def pay(self,money):
          # #         print(f'利用微信支付了{money}')
          #
          # class Wechatpay(Payment):
          #     def fuqian(self,money):
          #         print(f'利用微信支付了{money}')
          # # 支付功能 规划一下
          # def pay(obj,money,choice):  # 归一化设计
          #     obj.pay(money)
          # choice = input('qq,weixin,zhifubao')
          # obj3 = Wechatpay()
          # pay(obj3,300)
          # obj3.fuqian(300)
          # # print(11)
          # raise TypeError('代码格式错误')
          # print(222)
          # 第一种约束: 在父类定义一个pay方法,主动抛出异常,如果子类没有定义pay方法,并且沿用了父类的pay方法
          # 即会报错.   python推荐的一种约束方式.
          
      • 强制性约束

        • from abc import ABCMeta,abstractmethod
          # class Payment(metaclass=ABCMeta):
          #             # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
          #     @abstractmethod
          #     def pay(self, money):
          #         pass  # 抽象方法
          #
          #
          # class QQpay(Payment):
          #
          #     def pay(self, money):
          
          #         print(f'利用qq支付了{money}')
          #
          # class Alipay(Payment):
          
          #     def pay(self, money):
          #         print(f'利用支付宝支付了{money}')
          #
          # # class Wechatpay(Payment):
          
          # #     def pay(self,money):
          # #         print(f'利用微信支付了{money}')
          
          # class Wechatpay(Payment):
          
          #     def fuqian(self,money):
          #         print(f'利用微信支付了{money}')
          #
          #     # def pay(self,money):
          #     #     pass
          
          # obj3 = Wechatpay()
          # 利用抽象类的概念: 基类如上设置,子类如果没有定义pay方法,在实例化对象时就会报错.
          

    5.super的深入理解

    • # class A:
      #     def f1(self):
      #         print('in A')
      # class Foo(A):
      #     def f1(self):
      #         super(Foo,self).f1()
      #         print('in Foo')  # 2
      # class Bar(A):
      #     def f1(self):
      #         print('in Bar')  # 1
      # class Info(Foo,Bar):
      #     def f1(self):
      #         super(Info,self).f1()
      #         print('in Info f1')  # 3
      # obj = Info()
      # print(Info.mro())  # [Info, Foo, Bar, A]
      # obj.f1()
      # super() 严格意义并不是执行父类的方法.
      # 单继承: super() 肯定是执行父类的方法.
      # 多继承: super(S,self) 严格按照self从属于的类的mro的执行顺序,执行 S类的下一位.
      class A:
          def f1(self):
              print('in A')
      
      class Foo(A):
      
          def f1(self):
              super().f1()
              print('in Foo')
      
      class Bar(A):
          def f1(self):  # self = obj
              print('in Bar')
      
      class Info(Foo,Bar):
      
          def f1(self):  # self = obj
              super(Foo,self).f1()
              print('in Info f1')
      
      obj = Info()  # [Info, Foo, Bar, A]
      obj.f1()
      # 多继承: super(S,self) 严格按照self从属于的类的mro的执行顺序,执行 S类的下一位.
      
  • 相关阅读:
    DOM--6 向应用程序中加入ajax
    javascript优化--12模式(设计模式)03
    javascript优化--11模式(设计模式)02
    javascript优化--14模式2(DOM和浏览器模式)
    mvc-9测试和调试
    mvc-10部署
    mvc-6依赖管理
    less
    css3 总结03
    css3 总结02
  • 原文地址:https://www.cnblogs.com/W-Y-C/p/11164362.html
Copyright © 2020-2023  润新知