当前课程知识点:Python 交互式程序设计导论 > 第6周 > B 课程视频(平铺图片) > 编程技巧
返回《Python 交互式程序设计导论》慕课在线视频课程列表
今天我们将通过一个简单的棋子类来给大家介绍一下
类和对象在使用的过程中应该注意的问题
下面开始今天的课程
好,我们先来看一下这个棋子类
而这个类里面他有好几个错误
我们在上课的过程中会一个一个的解决它。
这个棋子类也是我们本周的项目中要用到的一个类。
当然在项目中我们的这个类要复杂的多
在我们今天的课上只是给大家简单的介绍一下
我们的目的就是为了带领大家一起来解决一下
在创建类和对象的过程中会碰到哪些问题,应该怎么去解决
好,我们先看这个类
首先我们先来运行一下,右键点击运行
大家看它下面提示了我一个错误
它提醒我什么错误呢?
你看,首先是类型错误,对吧,TypeError:类型错误
他说这个对象没有参数
我们来点击一下看它在哪一行
好,这一行
我们通过这条语句就创建了一个对象,名字叫fig
那么它是谁的一个对象呢?就是通过这个figure类创建的一个对象。
好,明显我们给它传了两个参数对不对?
大家看,第一个参数曹操,是名字。第二个参数是他的方向是向左。
那我给它传了两个参数下面的错误提示是它这个没有带参数。
这个错误是为什么?是这样的
我们在创建一个对象的时候一般都要去调用类里面的构造方法
那我们看一下这个类它的构造方法是什么样呢?
我们看有一个名字,一个方法的名字和我们类的名字是一样的,对吧?
一般情况下它是构造方法,但是在其他的计算机里面它是这样的,
但是在我们python里面构造方法他有一个自己特定的名字
他不是跟类的名字相同,它的名字是这样写的
__init__好大家看,其实pycharm它已经在提示我这个后面应该跟什么样的参数
但是我先不用它,我们会慢慢来解决这个问题,好点击一下
现在我们再来运行,看一下错误会不会发生变化
右键运行,刚才那个错误已经没有了,是吧?
很明显错误已经发生了变化,它说
还是类型错误
说我这个方法带了两个参数
看到没有,它说我有两个未知参数
但是呢,给了三个
就是说你给我传了三个参数,但其实它只需要两个
我们来检查一下,我们在创建对象的时候传了一个参数,两个参数,对不对?
然后再__init__这个构造方法里面呢,第一个构造参数棋子的名称,第二个参数移动的方向
也是两个参数,他为什么提示我是三个参数呢?
点击,它错误当然是在这一行了
这个错误主要是因为在创建一个对象的时候
就这个对象会作为一个参数传到类里面的方法中去
就是它本身也是一个参数,虽然我在创建它,它也会作为一个参数传到这个里面去
那类里面的方法,其他的方法和属性都是属于这个对象的
然后既然说它也是一个参数
那么好,第一个参数,第二个参数,第三参数
我们确实给了它三个参数
而在这个地方是需要的是两个参数,确实不一致,对吧?
大家一定要记住在函数调用或者说在类里面方法调用的时候参数一定要保持一致
那么它第一个参数是对象,就是这个我们创建的对象了
对象在python里面我们一般情况下习惯上用self来表示对象自己self
当然你可以用其他的名字,但是我们习惯上都用self这个参数来表示对象自己
好现在有三个参数了,这个问题肯定没有了
我再运行一下,错误立马没有了是吧?
变成了另外一个错误,不着急我们慢慢来看
好,错误的类型是命名错误,它说get_name没有定义
点击一下连接定位到这一行
大家看,我这个get_name传了一个对象参数,对吧?
但是我这个地方它说没有定义,很奇怪了,为什么呢?
因为我们这明明已经有一个方法名字
这是因为我们类里面的方法在调用的时候需要通过对象来调用
而不是说你直接把方法的名字写上跟函数调用一样
方法名字一写,参数一传递就可以了,它不是这样的
它其实调用的是类外面的一个方法
大家看,如果我在类的外面定义一个方法,也叫get_name,传一个名字
我这个什么也不做
大家看,我什么也不做,我这个再运行一下,程序还会报错吗
我们运行来看一下,好程序没有报错,返回值是null,为什么呢?
因为我这个函数里面什么也没有做,当然打印的时候结果肯定是null,对吧?
默认返回参数
这就说明此事它调用的是类外面的这个函数而不是类里面的这个方法
先把它注释掉,那我要调用它呢?
刚才我已经说过了我们是怎么调用呢?
通过对象来调用
好,对象是谁?fig.你看pycharm它已经给我们提示了你可以调用这两个对吧?
好,我们点一下回车,get_name就已经显示在上面了,就已经成功调用了。
此时它会调用这个方法,它会调用我们类里面的这个方法,再运行一下
运行一下,错误明显已经变了
它已经不在提示我们get_name没有定义了,而是另外一个错误
看一下这个错误是类型错误,是吧?
那后面是什么呢?
get_name这个方法需要0个参数,就是它不需要参数,但是我们却给了它一个参数
我们来检查一下
检查一下这个方法,括号里面有没有参数?没有
说明它不需要参数对不对?
这个地方不需要参数
但是我们在调用的时候它为什么给了一个参数呢?
主要是因为我们在调用的时候前面在这个地方已经给大家讲过
对象会作为一个参数传递,那就是说这个方法其实已经默认带了一个参数就是这个对象自己
那我们在类里面的方法中怎么表示自己呢?习惯上用self来表示
此时这个self就表示是这个fig对象自己
我再来运行一下,错误肯定会发生变化
好,命名错误NameError,它说name没有定义
定位一下错误,在这一行,这个name没有定义
这个name没有定义我们再看一下这个方法里面有没有去定义一个name
没有,确实没有去定义
那我们在类的前面有没有定义全局变量name,也没有
说明这个name确实没有定义那我们还要来用,在类里面是怎么回事呢?
主要是这样的
我们类里面的属性就是变量名了
属性我们习惯上都把它放在构造方法里面去定义和初始化
其次我说过,我们类里面的方法和属性都是属于对象的
那这个name是谁的?是对象self的,然后这个也是self的
当我们做了这样的规定之后,它就已经知道我调用的这个名字其实是它
因为我们要返回的其实是对象的名字,对不对?
我现在创建了一个对象是fig,我要返回它的名字
那当然也要返回的是对象的名字fig.然后我们再来运行一下
没有问题了,我们把错误都已经改掉了
往下来一下我们来看一下整个代码
要注意的地方,第一个构造方法的名字
构造方法的名字是:__init__,默认的名字都是这样的
然后我们的类里面的方法第一个参数是对象自己
习惯上我们用self来表示对象自己,后面当然是你传的其他的参数了
然后第三个:就是类里面方法在调用的时候是通过对象,点来调用的
不是说把函数的名字一写就可以调用了,不是那样的
是通过对象点来调用的,因为你要指明是哪个对象的方法
你要对哪个对象进行操作,所以是对象点
然后还有一个问题,就是python里面的类一般情况下类的名字习惯把首字母大写
写成这样的话就没有问题,首字母大写
我运行一下肯定也没有问题
好,关于类和对象使用过程中应该注意的问题就给大家讲到这里
我们下次课再见
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板