======================================================================
面向对象的整理
一 什么是面向对象的程序设计及为什么要有它,与面向过程的程序设计优劣对比以及应用场景
什么是面向过程?
核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么,基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式。
优点:复杂的问题流程化,进而简单化。
缺点:可扩展性差。
什么是面向对象
核心"对象二字",对象指的是特征与技能的结合体,基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式
优点:可扩展性强
缺点:编程的复杂度高于面向过程
二 类和对象
3.1 什么是对象,什么是类
类:对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体。
现实生活中的对象: 对象1: 特征: school="Oldboy" name="马冬梅" age=18 sex="female" 技能: 学习 选课 对象2: 特征: school="Oldboy" name="甜蜜蜜" age=21 sex="male" 技能: 学习 选课 对象3: 特征: school="Oldboy" name="原石开" age=22 sex="male" 技能: 学习 选课 现实生活中的老男孩学生类: 相同的特征 school="Oldboy" 相同的技能 学习 选课 ''' #1、程序中的类 class OldboyStudent: # 用变量表示特征 school="Oldboy" # 用函数表示技能 def learn(self): print('is learning...') def choose(self): print('choose course...') # print('======>') # 注意:在定义类的阶段会立刻执行类体内的代码,然后将产生的名字存放于类名称空间中 print(OldboyStudent.__dict__) print(OldboyStudent.__dict__['school']) print(OldboyStudent.__dict__['learn']) # OldboyStudent.__dict__['learn'](123) # print(OldboyStudent.school) # OldboyStudent.__dict__['school'] # print(OldboyStudent.learn) # OldboyStudent.__dict__['learn'] # OldboyStudent.learn('xxx') # OldboyStudent.learn('xxx') OldboyStudent.country='China' OldboyStudent.school='偶的博爱' del OldboyStudent.country print(OldboyStudent.__dict__) # 2、调用类,产生程序中的对象
3.2 类的属性引用和实例化
3.3 对象的属性引用
3.4 对象之间的交互
3.5 类名称空间与对象/实例名称空间
三 继承与派生
4.1 什么是继承
4.2 继承与抽象(先抽象再继承)
4.3 继承与重用性
4.4 组合与重用性
四
4.6 抽象类
五
4.7 继承实现的原理(继承顺序:深度优先,广度优先)
4.8 子类中调用父类方法
六 多态与多态性
5.1 多态
5.2 多态性
七 封装
6.1 要封装什么
6.2 为什么要封装
6.3 封装分为两个层面
八 property,绑定到对象的方法,绑定到类的方法,解除绑定的方法
九 反射
十 isinstance,issubclass,__str__,__slots__
十一 __del__
十二 __call__,元类