当前课程知识点:Python 交互式程序设计导论 > 第6周 > A 课程视频(类) > 面向对象编程(类和对象入门)
返回《Python 交互式程序设计导论》慕课在线视频课程列表
python有一些内置数据类型,如:字符串,列表,字典,集合等。
这些数据类型都有自己的方法,允许我们对其进行灵活的操作, 使用起来非常方便。
数据类型的方法定义了其操作方式, 以及对封装在类型中的数据可进行的操作。
每个对象都包含一些数据,我们能做什么是 由特定的数据类型所提供的方法决定的。
我们使用python已提供的数据类型就已经 可以编写出一些非常有用的项目。
然而,可以编写自己的数据类型是具有非常重要意义的。
面向对象程序设计,是围绕对象来设计的。
我们要做的是对这些对象创建新的数据类型。
在类型中封装一些数据,还可以增加一些方法。
通过这些方法来实现对这个类型的对象可进行的操作。
如果我们这样去做了,我们的程序将具有更多的功能。 更加的灵活,将使处理问题变得更加的简单。
好,下面我们就看如何来创建自己的数据类型。
让我们看一看我们新创建的对象是什么样的。
我打算定义一个新的数据类型,叫做Student。
也就是我们的学生类,大家都知道每个学生都有许多信息, 例如学号,姓名,性别,学院等。
我打算把这些信息都封装在我新创建的类型当中。
python和其他许多编程语言一样, 当你定义一个新的类型时它被叫做类。
那么英文单词叫class,所以要用class来定义新创建的类。
然后给类起个名字,我们定义的叫学生类,所以我起的名字叫Student。
Python习惯上将类名首字母大写,所以我的Student首字母已经大写。
定义完类名后记得最后加上冒号作为结束。
定义好类之后我们就可以定义一系列的方法。
那么,在这里我定义了5个方法。
这些方法看起来跟函数很像,我们没有叫它们函数的唯一原因是。
它们是被定义在类结构里的,它们只能操作Student这个类型的对象。
而不能通过其他方法直接被调用。
对于前两个方法,__init__方法和__str__方法,大家注意:
__init__方法和__str__方法前后分别有两个英文的下划线。
__init__方法被称作初始化器,也可以叫做构造函数。
在这里我们传入了5个参数self,student_id就是学号, name就是姓名,sex就是性别,college就是学院。
Self比较特殊,我们暂时忽略它,过会儿再解释。
其余四个实参分别设定了这个类型对象的学号,姓名,性别,学院
变量self实际上是一个新的对象的引用。
那么在python中我们习惯在这个变量使用self, 当然你也可以使用别的变量名。
下面我们要做的,就是创建该对象使用的域。通过点对域进行引用。
self.id就是说,id是self中的一个域。
我们将student_id这个实参赋值给self.id
同样我们还可以建立一个域叫name, 通过self.name对name这个域进行引用。
将实参name赋值给self.name。
大家可以看到我们的实参和这个域名字可以不同,也可以相同。
那么self.sex=sex,这是域sex的一个引用。那么这是性别
self.college=college那么这是学院这个域的引用和赋值。
最后我们又增加了一个course,称之为选修这样的一个域。
我们初始化为空列表,完成了所有域的初始化工作,注意:
在这里__init__方法没有返回任何东西, 那么这个构造函数是用来建立self这个新对象的。
它不需要返回任何值。
对于__str__这个方法它需要一个参数self。
那么这两个带下划线的方法我们不需要直接调用, 它们是在后台由python直接调用的。
对于__str__这个方法我们做的操作就是返回了这个对象中的所有信息。
好,我们看后面三个方法。
对于第三个方法我们把它称之为选修课方法,它跟了两个参数,
一个是self一个是course,也就是我们的课程。
我们通过点来引用course这个域,self.course, 因为它在初始化的时候被定义为列表。
所以我们又可以使用列表的方法,self.course.append方法 将我们的课程加入到选修课的列表当中。
那么第四个方法get_name,也就是获取名字这个方法, 它的参数只有一个self,它很简单只要返回self.name就可以了。
第五个方法get_sex,那么它也只有一个参数是self, 它也很简单就是返回self.sex。
当完成student类的定义之后,我并没有告诉别人 如何使用我新创建的类。
那么这正是面向对象程序设计的优势所在。
我可以只定义这个类而不用担心别人怎么使用它。
使用类的唯一方法是调用这些我已经建立好的方法。
所以我定义了一个接口,大家只要按照这些接口的 使用方法来使用就可以了。
下面代码的折叠部分是对Student类的一个使用。
当我在使用新类时我并不担心其中的方法具体是如何实现的, 我只需要知道它有哪些方法。
就像我前面用到的course它是一个列表,我知道它里面有一个append方法, 它会将我的课程添加到course列表当中。
那我只要去使用它就可以了, 而不需要具体了解append这个方法是如何操作的。
好,我们打开这个实例。
我们将方法的具体实现折叠起来。
我们是如何创建一个新类型对象的呢?
类名就变成了一个构造函数。
当我想创建一个新的Student对象时,我调用Student这个类
就像普通的调用函数一样。
那么在这里我传入四个参数,学号,姓名,性别,学院,
注意:在这里我没有传入self,self是不需要被传入的。
那么它是在后台处理的。
即使这个初始化函数没有返回任何值, 那么其实它返回了我刚刚创建的新的对象student。
下面我调用了这个__str__方法,它是输出我的基本信息。
第三行我进行了一个课程的选修,我选择了python,用来一个select方法。
第四行对我的信息再次进行输出。
第五行我又选修了一次课程,用select方法选择了Java。
那么第六行我又对我的信息进行了一个输出。
第七行我使用get_name方法获取了我的名字, 对它进行了一个输出,我使用get_sex方法获取了我的性别。
对它进行了输出,好,我们来运行。
那么当我输入参数以后输出我的信息
那么第一行学号:001 ,姓名:寇晓斌, 性别:男,所属院系:计算机学院,所选课程:空
当我完成一次选课以后,那么前面的信息没有改变,
在我的选修课程列表中增加了一门课程python
当我再次完成一门课程的选修以后,前面的所有课程没有改变, 在选修课程里面我又增加了一门java。
当我用get_name方法获取姓名的时候进行输出, 那我得到了我的姓名-寇晓斌。
当我用get_sex方法获得性别进行输出以后,我得到了我的性别-男
这就是我们定义和使用自己创建的类的方法, 希望大家通过实践去创建更有趣的东西。
好,我们的内容就到这里。
-课程简介
--课程简介
-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周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板