1.oop三大特征之继承
1.什么是继承
继承是一种关系,描述两个对象之间,什么是什么的对象。在程序中,继承描述的是类与类之间的关系。例如a继承了b,a就能直接使用b已经存在的方法和属性,其中a称之为子类,b称之为父类,也称为基类。
2.为什么要使用继承:
继承的一方可以直接使用被继承一方已经有的东西。其目的是为了重用已经有的代码,提高代码的重用性。减少代码重复,为多态提供必要的支持。
3.如何使用继承
class 类名称(父类的名称): 类的内容 # 在python中 一个子类可以同时继承多个父类
4.继承与抽象
继承描述的是子类与父类之间的关系。在有些例子中,子类虽然继承了父类并完成了代码的重用,可继承关系在逻辑上是错误的。oop的概念来自现实世界,所以应当遵循现实世界的逻辑。为了避免这种逻辑错误,我们可以将子类与父类间相同的部分参数抽取出来放到另一个类中,这个类称为公共父类。这个类与实际的业务需求是无关的在现实中也不实际存在,它的作用仅仅是存储相同代码以减少重复;这一过程我们称之为抽象。先抽象再继承。
5.存在继承关系后的属性查找
一个类必然继承另外一个类,被继承的类也有可能继承了其他的类,相当于C继承了B,B又继承了A。
此时的查找顺序为 :对象本省的名称空间>>>类的名称空间>>>父类的名称空间>>>父类的父类的名称空间>>>object类。它会沿着继承关系一直往后找,直到找到为止,由于object是所有类的根类,所以不着最后都会去查找object类!
6.派生与覆盖
(1).什么是派生
当父类提供的属性无法完全满足子类的需求时,子类可以增加自己的属性或非法,或者覆盖父类已经存在的属性,此时子类称之为父类的派生类;
(2).什么是覆盖
在子类中如果出现于父类相同的属性名称时,根据查找顺序,优先使用子类中的属性,这种行为也称为覆盖。
7.经典类与新式类
即使没有直接继承关系,super仍然会按照mro继续往后查找,而第一种方式明确指定了要到哪一个类中去查找,找不到则直接抛出异常。
8.组合
软件重用的重要方式除了继承之外还有另外一种方式,即:组合。组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。
组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,
(1).继承的方式
通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,
当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好。
(2).组合的方式
用组合的方式建立了类与组合的类之间的关系
9.继承实现的原理
如果继承关系为菱形结构,那么属性查找的方式有两种,分别是深度优先和广度优先,
MRO列表并遵循如下三条准则: 1.子类会先于父类被检查 2.多个父类会根据它们在列表中的顺序被检查 3.如果对下一个类存在两个合法的选择,选择第一个父类 。
2.oop三大特征之封装
1.封装的简单介绍
封装指的是隐藏对象的属性和实现细节,仅对外公开接口,控制程序中属性的访问权限;python中的权限有两种:一种是公开,外界可以直接访问和修改;另一种是不能直接由外界进行修改,但可以通过类完成修改。
2.封装的必要性及封装方法
封装的目的是为了限制属性的访问和修改,用来保护数据安全。
封装方法:
一个大的功能模块是由很多小功能组合而成的,而这些小模块对用户来说是没有意义的,所以封装的目的是为了隔离复杂度 。在属性名前添加两个下划线__。可将其设为私有。
(1)封装数据属性:网页中重叠