.封装

  • 定义:将一些东西内容封存到一个地方,你还可以再取出,

    • 类设置静态属性,设置一些方法
    • 对象可以在其对象空间中封装一些属性

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类的下一位.

最新文章

  1. Android自定义组件
  2. tps (事务处理系统)
  3. 最近360和adsafe软件有冲突
  4. [LintCode] Word Break
  5. 【T-SQL系列】临时表、表变量
  6. Android:什么是Holo?【Translated By KillerLegend】
  7. [Oracle]Audit(二)--清理Audit数据
  8. Linux搭建SVN服务器(服务端)
  9. [C#] 動的にアセンブリをロードする
  10. GIS软件相关安装(持续更新)
  11. 前端框架之Vue(10)-全家桶简单使用实例
  12. 用Handler的post()方法来传递线程中的代码段到主线程中执行
  13. jQuery调用WCF需要注意的一些问题
  14. MVC-READ2
  15. loadrunner12-错误 -26366: 找不到 web_reg_find 的“Text=19728.00”
  16. Replication--使用备份初始化订阅--请求订阅
  17. Java-Maven-Runoob:Maven 构建 Java 项目
  18. Ubuntu下安装部署MongoDB以及设置允许远程连接
  19. ARM模式下创建Express Route
  20. 问题009:java当中的关键字有哪些?在Editplus文本编辑软件中是什么颜色的?java当中的标识符有什么要求?Java中注释分为几类?

热门文章

  1. 201612-2 工资计算 Java
  2. win10编译tensorflow C++接口
  3. mqtt+htttp+websocket
  4. ubuntu18.04国内软件源
  5. 封装FTP类
  6. 吴裕雄--天生自然 PYTHON3开发学习:网络编程
  7. 树莓派切换到root用户
  8. [原]C++新标准之std::chrono::time_point
  9. grep -v|grep -F
  10. ubuntu linux下解决“no java virtual machine was found after searching the following locations:”的方法