面向对象内容不多,也相对简单,但很重要,学透学懂很关键。
面向对象
对象:用户所创建的 特征:动作或功能放在一起就是一个对象
对象如何创建?在python中对象是通过类来创建的,类是通过对象的描述
Class
Car:
Def fly(self):
Pass
类与对象的关系:
类是类型,类别,对事物的描述
对象是个体
具体的,某一个东西或者对象
创建对象:
类名() 实例化
三大特征:
1, 封装:将数据或者方法封装在一个类中
2, 继承:子类可以自动调用父类除了私有方法中的全部内容,包括抽象方法
3, 多态:同一个对象,多种形态
成员:
1. 变量
实例变量:对象拥有的东西
类变量:类拥有的东西,多个对象共享的。最好就是类名去访问类变量。对象可以访问,但不能修改。
2.方法:
实例方法: def 方法(self): pass
静态方法:@staticmethod def 方法(self) 最好类名去访问
类方法:@classmethod def 方法(cls)
3.属性
用方法来描述属性信息
类与类之间的关系
依赖关系: 关系最弱
在方法的参数中传递其他类的对象
关联关系:组合,聚合 关系很紧密
把一个对象装在自己身上
继承关系:实现关系
class 子类(父类):
pass
父类:基类,超类
子类:派生类
实现关系:
父类:抽象类。如果父类是抽象方法,父类被称为“接口”
子类:必须对父类的抽象方法重写
约束:
父类对子类的约束。子类必须重写的内容
抛异常:raise NotImplementError
抽象类:
From abc import ABCMeta,abcstractmethod
元类必须设为ABCMeta,Metaclass = ABCMeta
这个类必须可以重写抽象方法。@abstractmethod
类中包括抽象方法。那么这个类一定是抽象类。抽象类一般不创建对象
Mro:
经典类
采用的是深度优先遍历。
新式类
如果没有菱形,就是深度优先。
如果是简单菱形继承,把头干掉。使用深度优先,最后是头。
如果是复杂的菱形采用C3算法。先找到每个类的继承关系,先拆分,然后再合并。
super:
执行MRO列表中的下一个类中的方法。
super().方法(
) super(类名,self).方法()