私有成员
类的成员按照公有私有分为2种:私有成员 公有成员
私有成员分为3种
私有方法
私有属性
私有静态属性
私有成员:只可以在类中访问,不能在类外部以及派生类访问
空间,以及查找顺序
类名()会产生一个对象空间,此空间有对象指针,对象可以通过这个类对象指针找到从属的类
对象查询属性:先从对象空间去找,对象空间没有,通过指针去所属类去找
类查找顺序先从本类去找,如果没有从父类去找
类与类之间的关系
类与类之间原本没有关系,但是为了程序的扩展,增加代码之间耦合性,可以让类产生关系
依赖关系
依赖关系是类与类之间耦合性最低的关系,就是将一个类的类名或者对象传入到另一个类的方法中
组合关系
给一个类的对象封装一个属性,这个属性是另个类的对象
继承关系
类的约束
方式1 提取父类,然后在父类中定义好方法,在这个方法中什么都不干就抛一个异常就可以了,这样所有的子类必须重写这个方法,否则,访问的时候报错
方式2 使用元类来描述父类,在父类中给出一个抽象方法,这样子类就不得不给出抽象方法的具体实现,也可以起到约束的效果
类名
类名.__dict__ 返回类的所有信息
类名.公有静态属性 增删改查
可以在外部,内部,派生类进行操作
类名.方法 一般直接调用(类方法 静态方法)
面向对象的三大特性
继承
继承的优点
1 提高代码的复用性
2 提高代码的维护性
3 让类和类产生关系,使得代码更具关联性,增加耦合性
单继承
执行父类的静态变量
如果子类没有同名变量则可以直接,寻找
如果子类有存在与父类同名的静态变量则通过super().area,或者直接父类.变量名的方法查找
在子类中即执行本类有执行父类的方法
父类名.方法(self,父类此方法所需参数)
super().方法名(父类所需参数)
只执行父类的方法:子类中不能定义同名的方法
多继承
经典类:深度优点,一条路走到底
新式类:C3算法,通过mro方法可以查出父类的继承顺序
多态
python默认支持多态:即一个变量可以代指不同的类型,不用规定死,比如函数的形参func(a):对于形参a来说,它可以代指任意数据类型
python崇尚鸭子类型:长得像鸭子,他就是鸭子
子主题
一个事物,多种形态
对象
1 如何产生一个对象:类名() 实例化过程
2 实例化过程发生了3件事
1 类名()自动执行object类中的__new__方法,产生并返回一个对象空间
2 之后执行__init__方法 将对象空间传给self
3 在__init__方法,给这个对象空间封装属性
3 对象查询对象的所有属性:obj.__dict__
4 对象操作对象属性(增删改查)obj.属性名
5 对象查询类中的静态变量:obj.变量名
6 对象可以调用类的实例方法obj.函数名(self)