当前课程知识点:Python 交互式程序设计导论 >  第6周 >  A 课程视频(类) >  对象可视化跟踪执行

返回《Python 交互式程序设计导论》慕课在线视频课程列表

对象可视化跟踪执行在线视频

对象可视化跟踪执行

下一节:华容道中的类

返回《Python 交互式程序设计导论》慕课在线视频列表

对象可视化跟踪执行课程教案、知识点、字幕

今天我们的主要内容是通过可视化的模式

帮助大家理解一下类和对象的概念

下面开始今天的内容,先看我们第一个例子

第一个例子我们定义了一个point类

这个类还是一个表示坐标点的一个类

那我们创建了p、q、r三个对象,我们来调试下

看它是怎么执行的,可视化执行,好,我们进行下一步

下一步的时候大家发现就在我们右侧这样框架有个全局的栈框架

里面是我们point这个类,它指向的是一个类,对吧

这个类有三个方法,一个是我们默认的构造方法init

还有一个getX和setX的方法,接下来我们就会创建第一个对象p了

p是一个类对象,这个对象传入的参数是4和5

那就是x的坐标值是4,y的坐标值是5

我们看一下它到底是怎么创建这个对象的,下一步

点击下一步的时候它调用了我们类的构造方法

init方法对吧,然后我们之前讲过self就是对象自己了

那此时这个self就指向了一个类???类对象

实例就是对象,就是指向了我们一个point的一个对象

其中x是4,y是5,再下一步,下一步看一下,self的x

那就是我们类对象的x值是4,再下一步self的y值是5

我们知道我们init方法是没有返回值的

这个地方它写的返回值是none,此时通过init方法创建了一个对象

这个对象就是self,然后我们把这个对象就赋值给我们的p

下一步看一下,p就指向了我的一个类对象,是吧

其中p的x值是4,p的y值是5,接下来我们就创建我们的第二个对象q

我们看一下它的输入参数也是4和5,跟p的输入参数是一样的

它们在内存里是不是指向同一个对象呢?下一步

看一下这个self也是指向一个point类的对象了,再下一步

self的x值是4,self的y值是5,再下一步

大家发现p和q虽然它们的x值和y值都是相等的

但是它们指向的是不同的类对象, 在内存空间里是两个不同的类对象,是吧?

然后看r这个对象的创建,它是通过p的值赋值给了r

其实r是p这个对象的一个别名了,我下一步看会发生什么事情呢?

r指向了p指向的对象,那就是说r和p指向的是同一个类对象

同一个point类的对象

那我p.要修改p的x的坐标值肯定是修改p指向的这个对象的x的值

下一步看一下,是不是它self指向的是p的对象,对吧?

然后新的x值是10,再下一步,此时p指向的这个对象x值变成了10

q没有发生变化,因为他们指的是不同的对象,再下一步

修改完了之后我要把3个的值打印出来了,先调用p.getX这个方法

然后再把它打印出来,那我们分析一下

因为我们的p和r指向的是同一个对象,所以

打印出来r的x值应该也是10,而我们的q指向的是不同的对象

所以它的x值没有被修改,仍然是4,我们执行一下看是不是这样的

我就快点执行了,对不对?p的x是10,q的x没有发生变化是4

r的x也是10,这是我们第一个例子,通过这里例子可视化的方式

我么就看了一下,在我们python 里面,类在内存里是怎么存在的

然后创建对象的过程是什么样的,接下来我们看第二个例子

同样这个例子也是我们刚才的那个point类了

只不过我给它换了另外一种写法,另外一种写法看一下

这个地方我把坐标作为一个列表整个来保存的, 而不是分开来保存的,是吧?

可视化执行,同样下一步,这时候???框架

类point指向的是这个类,里面同样有三个方法

构造方法,get_coord就是取坐标值的, set_coord是修改坐标值的方法

这个地方我们会创建一个列表,值是4和5,下一步

一个全局的列表,指向的这个list值的是4和5

接下来我们要创建对象了,同样我们也创建了p、q、r三个对象

p和q两个对象创建的时候,它们的输入参数都是我的这个列表值

下一步,同样它调用的是构造方法了

self指向了一个point类的一个对象,下一步,大家发现

因为这个全局的列表它指向的是这个列表

那我们的self就是我们对象它的坐标列表是coord是吧

这个coord也指向的是这个列表,因为它是直接赋值的过程

把它直接复制给它,接下来我们继续执行

创建q的过程跟p的过程是一样的,再继续下一步

再继续下一步,p和q它们两个的坐标值coord是不一样的

对吧,但是它们两个的coord又指向了同一个列表

就是p和q指向不同的对象, 而它们对象里的这个坐标列表值

又指向了同一个列表,接下来我们看r这个对象的创建

它直接输入了坐标列表,没有通过全局变量的方式输入,下一步

它指向的是4、5,再下一步,再下一步,我们看r这个对象

它指向的是这个实例,就是这个point对象了

此时它的coord值是这个列表,跟他们虽然是值一样的

但是是完全不一样的两个列表,就是两个不同的对象了

它们是不同的对象,那我再通过p.来修改的时候

p.调用修改的肯定是这个列表,对吧,因为它的coord是它

它的coord又指向的是这个列表,所以它肯定修改的是这个值了

修改一下,下一步,r的值没发生任何变化

虽然p和q指向的类对象是两个不同的对象

但是这个对象里面的属性coord它们指向的是同一个列表值

所以当一个被修改的时候另一个列表的元素值也被修改了

那我们再下一步打印下值看我们分析的对不对,分析

看p的x坐标值已经是10,q的x坐标值也是10

还是这么取的,看q的x坐标值它指向的是它,对不对?

然后要取x的时候是指向它,肯定是返回的是这个值

返回的是这个值,所以它也是10,再下一步,也是10

那当我取r的时候,r的x的坐标

因为r指向的是这个对象,对吧,下一步看一下,它指向的是这个对象

再下一步,取值的时候肯定是取的是这个值, 因为它的属性coord x元素是它

下一步,返回值是4,再下一步,打印结果

那你看通过这个例子会发现我们修改p的这个对象的时候

q这个对象也同时被修改了

那其实我们在这个例子里面只是说 p和q两个对象的初始值是一样的,对吧

初始坐标值是一样的, 但是我们并不希望修改一个的时候另一个也发生变化

这不是我们想要的,那我们应该怎么去解决这个问题呢?

我给大家修改一下

那我们只要在这个地方赋值的时候给它进行拷贝就可以了

这样的操作是我把这个列表拷贝了 一份赋值给了它,并不是这个列表本身

我们快速的给大家调试一下,调试一下,看此时发生的变化

前面我们self的coord会直接指向这个list, 当时它的箭头是它指向它的

那现在因为我通过这种拷贝的方式是 拷贝了一份它赋值给了它,对不对

我拷贝了一份这个list放到了这个地方赋值给了它

所以它们就不会互相有影响了

那我们修改其中一个值得时候当然也不会修改另外一个了

我快速执行看一下p、q、r,大家看现在p和q指向不同的类对象

对吧,然后对象的属性也指向了不同的列表这个对象

它们两个是完全不同的列表,但是这两个列表都是它的拷贝

所以它们的值是一样的,那再修改其中一个的时候就不会改变另一个了

继续下一步,它们三个的x坐标值,我p.修改了p的x坐标值

q的值没有发生变化,r的值也没有发生变化

这个例子就给大家讲到这里

今天我们主要是在 通过python在线助手可视化的给大家调试了一下类和对象

我希望同学们在课下自己也操作一下,就按照我们上课讲的这个例子

自己实际去调试一下,好好理解一下我们类和对象是怎么创建的

那我们今天的课程就上到这里,我们下次课再见

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

对象可视化跟踪执行笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。