《Python学习手册 第五版》 -第31章 类的设计

Posted 诡刺-ThornSoul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Python学习手册 第五版》 -第31章 类的设计相关的知识,希望对你有一定的参考价值。

前面的章节是侧重讲解方法的了解和运用,本章节侧重讲解类中设计的一些理念,更多的是一些概念和思维逻辑

本章重点内容:

1、Python和OOP

2、OOP和继承:“is-a”关系

3、OOP和组合:“has-a”关系

4、OOP和委托:“包装器”代理对象

5、类的伪私有属性

6、方法是对象:绑定或未绑定

7、类是对象:一般对象的工厂

8、多继承:“mix-in”类

接下来针对以上内容展开详细说明

1、Python和OOP

Python的OOP实现可以总结为三大思想:继承、多态、封装

继承:简单来说,就是实现了代码最大程度的共享,而不是复制

多态:同样的方法,对于不同的对象,会有不同的行为,多态是灵活性的表现

封装:简单的来说,就是需要的都在一起,而且关注重点,不关注细节,我要的是否能做到,不在乎你怎么做到

其中多态需要多说一下,Python中的多态是接口,不是函数调用,是什么意思呢?这个要对比C++来说

C++的多态是通过函数通过不同调用的参数实现的,也就是说,你传递的参数不同,调用的函数行为不同

而Python中多态是一个接口,传递的参数不管是几种,都会调用一个函数,通过这个函数来体现不同的行为,所以运用起来会更简单

2、OOP和继承:“is-a”关系

 如何很好的理解继承?可以通过真实世界的关系来说明,之前我们有说明过员工的例子,可以用员工来说明

首先由员工类,然后继承后,进行方法重载,有了管理者类,通过管理者类创建类实例A,可以这样说:A是一个管理者,管理者是一个员工

所以继承反应的现实关系就是“is-a”关系

3、OOP和组合:“has-a”关系

有些类不一定是通过继承获得,也可以通过组合,什么叫组合?还是承接上面员工的例子说明,往大一点说,我们创建一个企业类,企业类里面含有员工类、管理者类

所以对于企业类来说,它就是组合的,也就是“has-a”的关系,组合的类下面有什么什么类

4、OOP和委托:“包装器”代理对象

从某种意义上讲,委托是组合的一种特殊形式,委托通常是指控制器对象内嵌其他对象,并把操作请求传递给那些内嵌的对象。控制器能够负责管理类活动

这样说,可能容易理解,可以通过代码示例来说明,如下:

 

 先简单说下代码:首先是创建一个Wrapper类,然后创建了实例x和y

你会发现,Wrapper类的构造函数就是把创建的对象本身赋值给了wrapped,而通过对象本身的属性来实现Wrapper的调用

Wrapper类就像一个代理,把接受到的调用请求传递给对象本身,然后对象本身再调用方法,这里的Wrapper类就是委托的关系,它也叫一个控制器,可以在对象本身方法之外增加额外的步骤

在这里,额外的步骤就是【Trace】

 5、类的伪私有属性

属性的私有是为了隐藏数据或者为了避免属性名称冲突,在这里说是伪私有属性,是因为在python中,能起到私有属性的特点,但是又是可以被修改的,所以不是真正的私有

 

 假设一个程序员创建了C1类,并使用了属性x,而另一个程序员,并不知道C1类有什么属性,所以他创建了C2类,也使用了属性x,在此也没有什么问题,但是如果一个类同时继承了这两个类,问题就产生了

 

 x属性的值取决于谁最后调用的方法,所以你会发现C1类中的x=88被覆盖了,如果你想彼此都能打印,互补影响怎么办?可以通过伪私有属性的方法

伪私有属性的方法很简单,就是在属性前面增加两个下划线,增加两个下划线后,系统会自动在属性前面增加类的名称,对比上面的代码,可以看下下面伪私有属性的代码展示:

 

 6、方法是对象:绑定或未绑定

在类和实例的方法,也可以看成对象进行传递使用,所谓的绑定和未绑定是对类方法和实例方法而言的

未绑定:是通过类调用方法

绑定:是通过实例调用方法

以下通过代码示例说明会更清楚

我们之前经常用的是通过实例来调用方法,如下:

 

 以上就是通过实例绑定的方法调用

也可以直接调用类的方法,但是在调用类的方法的时候,第一个参数必须传递一个实例,如下:

 

 可以直接调用类的方法

7、类是对象:一般对象的工厂

在这里“工厂”是一个概念,是类设计的概念,你设计的类,就像一个工厂,之后可以产生很多其他类,工厂有什么好处?就是大批量规模化生产

类也是一样,如果你有了类,就可以通过继承,产生自己需要的类,这种工厂编程模式主要是为了促进代码的灵活性和可用性

8、多继承:“mix-in”类

这个概念其实前面也有涉及过,如果一个类从多个类继承属性和方法,就是多继承

多继承对应现实中的关系,就是一个人可能有多个身份,比如一个人可以是工程师、作家、音乐家等

这是多继承的优点,但是也有潜在的去店,就是当相同的方法名称在不止一个父类中定义时,就会产生冲突,这个时候就需要特别注意,甚至需要自己手动修改名称

 

以上就是本章的重点内容说明,下章见!

 

《Python学习手册 第五版》 每章时间规划及完成进度:

2019.11.25-2019.12.01 第01章,已完成:《Python学习手册 第五版》 -第1章 问答环节

2019.12.02-2019.12.08 第02章,已完成:《Python学习手册 第五版》 -第2章 Python如何运行程序

2019.12.09-2019.12.15 第03章,已完成:《Python学习手册 第五版》 -第3章 你应如何运行Python程序

2019.12.16-2019.12.22 第04章,已完成:《Python学习手册 第五版》 -第4章 介绍Python对象类型

2019.12.23-2019.12.29 第05章,已完成:《Python学习手册 第五版》 -第5章 数值类型

2019.12.30-2020.01.05 第06章,已完成:《Python学习手册 第五版》 -第6章 动态类型

2020.01.06-2020.01.12 第07章,已完成:《Python学习手册 第五版》 -第7章 字符串基础

2020.01.12-2020.01.19 第08章,已完成:《Python学习手册 第五版》 -第8章 列表与字典

2020.01.20-2020.01.26 第09章,已完成:《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型

2020.01.27-2020.02.02 第10章,已完成:《Python学习手册 第五版》 -第10章 Python语句简介

2020.02.03-2020.02.09 第11章,已完成:《Python学习手册 第五版》 -第11章 赋值、表达式和打印

2020.02.10-2020.02.16 第12章,已完成:《Python学习手册 第五版》 -第12章 if测试和语法规则

2020.02.17-2020.02.23 第13章,已完成:《Python学习手册 第五版》 -第13章 while循环和for循环

2020.02.24-2020.03.01 第14章,已完成:《Python学习手册 第五版》 -第14章 迭代和推导

2020.03.02-2020.03.08 第15章,已完成:《Python学习手册 第五版》 -第15章 文档

2020.03.09-2020.03.15 第16章,已完成:《Python学习手册 第五版》 -第16章 函数基础

2020.03.16-2020.03.22 第17章,已完成:《Python学习手册 第五版》 -第17章 作用域

2020.03.23-2020.03.29 第18章,已完成:《Python学习手册 第五版》 -第18章 参数

2020.03.30-2020.04.05 第19章,已完成:《Python学习手册 第五版》 -第19章 函数的高级话题

2020.04.06-2020.04.12 第20章,已完成:《Python学习手册 第五版》 -第20章 推导和生成

2020.04.13-2020.04.19 第21章,已完成:《Python学习手册 第五版》 -第21章 基准测试

2020.04.20-2020.04.26 第22章,已完成 :《Python学习手册 第五版》 -第22章 模块:宏伟蓝图

2020.04.27-2020.05.03 第23章,已完成:《Python学习手册 第五版》 -第23章 模块代码编写基础

2020.05.04-2020.05.10 第24章,已完成:《Python学习手册 第五版》 -第24章 模块包

2020.05.11-2020.05.17 第25章,已完成:《Python学习手册 第五版》 -第25章 高级模块话题

2020.05.18-2020.05.24 第26章,已完成:《Python学习手册 第五版》 -第26章 OOP:宏伟蓝图

2020.05.25-2020.05.31 第27章,已完成:《Python学习手册 第五版》 -第27章 类代码编写基础

2020.06.01-2020.06.07 第28章,已完成:《Python学习手册 第五版》 -第28章 一个更加实际的示例

2020.06.08-2020.06.14 第29章,已完成:《Python学习手册 第五版》 -第29章 类代码编写细节

2020.06.15-2020.06.21 第30章,已完成:《Python学习手册 第五版》 -第30章 运算符重载

2020.06.22-2020.06.28 第31章,已完成

2020.06.29-2020.07.05 第32章,未完成

 

以下链接,可以供你了解这个学习笔记的所有章节最新进度

自学笔记系列:《Python学习手册 第五版》 -写在开始之前

以上是关于《Python学习手册 第五版》 -第31章 类的设计的主要内容,如果未能解决你的问题,请参考以下文章

C++ Prime(第五版)--第二章学习记录

c++primer第五版中文版第三章学习笔记

c++primer第五版中文版第二章学习笔记

C++ Primer(第五版) 整理和总结

sql 入门经典(第五版) Ryan Stephens 学习笔记  第四部分:建立复杂的数据库查询

perl简洁编程,《Perl语言入门(第五版)》读书笔记