面向对象总结

面向对象总结

基础概念

  • 类——具有相同方法和属性的一类事物
  • 对象、实例——一个用用具体属性值和动作的具体个体
  • 实例化——从一个类得到一个具体对象的过程

组合

  • 一个类的对象作为另一个类的实例变量
  • python是课程类的对象
  • 晶晶是学生类的对象
  • 晶晶.course = python
  • 学生和课程便产生了一种组合

三大特性

  • 封装
    • 广义的封装:类中的成员
    • 狭义的封装:私有成员
      • __名字
        • 只能在类的内部使用,既不能类的外部调用,也不能在子类中使用
        • 类名__名字
  • 继承
    • 所有的查找名字(调用方法和属性),都是先找自己的,自己没有的找父类的,如果自己和父类都累,希望自己和父类都调用,可以用super()/指定类名直接调用
    • 父类、基类、超类
    • 派生类、子类
    • 多继承
      • 查找顺序
      • 深度优先——python2
      • 广度优先——python3
    • 单继承——子类可以调用父类的方法
      • 查找顺序
  • 多态
    • 一个类表现出的多种状态-------->多个类表现出的相似状态
      • user类 用户类
        • vip_user
          • 完成支付功能
          • 浏览山商品
        • svip_user
          • 完成支付功能
          • 浏览山商品
    • 鸭子类型
      • vip_user和svip_user
      • list和tuple

类成员

  • 特殊成员
    • 类成员
    • 绑定方法
    • 特殊方法
      • 类方法 classmethod——将原本对象调用的方法变为类调用的方法
      • 静态方法 staticmethod——将普通函数挪到类里
      • 属性 property——将普通方法伪装成属性

双下方法/魔术方法/内置方法

  • _srt_
  • __new__构造方法
  • __init__初始化方法
  • __dict__属性
  • _call_ 源码中很容易写这样的方法
  • _enter _exit_ with上下文管理
  • _getitem
  • _settitm_
  • _delitem_
  • __add__两个对象相加
  • _iter_
  • _dict_

相关内置函数

  • isinstance——对象和 类的关系
  • issubclass——类和类的关系
  • type——类型 类 = type(对象)/平常皆为内置
  • super——遵循mro顺序查找上一个类的

新式类和经典类

  • py2继承object就是新式类

  • 默认是经典类

  • py3都是新式类,默认继承object

  • 新式类

    • 继承object
    • 支持super
    • 多继承 广度优先:C3算法
    • mro方法——可以通过mro算法看继承顺序D.mro()
  • 经典类

    • py2中不继承object
    • 没有super语法
    • 多继承 深度优先
    • 没有mro方法
记录学习的点点滴滴
原文地址:https://www.cnblogs.com/yangzilaing/p/14878346.html