内容正文:
少儿编程课
1
面向对象编程
程序设计的发展过程
3
先来了解下程序设计(编程语言)的发展过程
非结构化程序设计
结构化程序设计
面向对象程序设计
类和对象的基本概念
5
想要理解面向对象,首先需要了解面向对象中最基本的两个概念:类与对象
这是一个人吗?
这是程序员吗?
想要理解面向对象,首先需要了解面向对象中最基本的两个概念:类与对象
这是一辆车吗?
这是一只鸟吗?
那么什么是类和对象呢?
类:你心中对某一些“东西”的定义和分类:比如人(类)、车、鸟(类)、程序员
对象:这些东西中的某个个体,比如乔布斯、楼下那辆车、窗体上那只鸟等,就称为对象
思考一下:先有类还是先有对象呢?
先来看现实世界中,是先有类的概念还是先有对象的概念
也就是说,人不是从出生就知道总类的概念的,这是一个学习的过程
判断
从具体的鸟,到脑海中有清晰的鸟的形象的过程,就称为抽象
对象
类
抽象
抽象
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
于是我们可以得出结论:在现实世界中,先有对象,对象的共同特点被抽象成类的概念:
而对于计算机中的面向对象的编程语言(如python)来说,则刚好相反
需要先定义类,也即定义某一类东西的全部特征,然后使用这个类去创建一个个的个体(对象)
Python中的面向对象
13
接下来我们就来看看,Python中面向对象编程如何实现
1
首先定义一个类,Python中类的定义使用class关键字,后面跟类名
class Person():
2
接着,思考一下,类里面写什么内容呢?
以人类为例,类既然起到模板的作用,那么就应该包含全人类的共同特征,具体来说包含两点:
静态特征:属性
动态行为:函数/方法
类
类的名称可以任意,采用驼峰命名法,也即每个单词的首字母大写,如Book、Person、WildAnimal等
下面我们把类中属性的定义补充完整并定义一个对象出来:
1
在类中,加入__init__方法
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
这里的__init__方法是一个特殊的方法(init是单词初始化initialization的省略形式)
在使用类创建对象之后被执行,用于给新创建的对象初始化属性用。
下面我们把类中属性的定义补充完整并定义一个对象出来:
2
初始化属性的语句就是self.name = name这种了,这一句不太好理解,我们把它改编一下就好理解了:
def __init__(self, n, a):
self.name = n
self.age = a
首先这是一个方法,方法的形参有self,n和a三个。
这个self,表示对象本身,谁调用,就表示谁(这句话不好理解,先记住,我们后面分析)。
语法上,类中的方法的第一个参数都是self,这是和普通方法区别的地方。
这里self.name = n和self.age = a表示将外部传来的n和a,赋值给了self对象的name和age属性。
这里的n和a,其实叫什么都可以,但是会有个问题:一般我们调用方法的时候,想自动提示一下或者查看文档看一下这个方法的参数要求,如果形参名都是n、a、m、i这些,会让人摸不着头脑,不知道到底该传入什么样的实参。因为这里我们传入实参是为了给属性赋值,为了能见名知意,将形参的名字定义的跟属性一致,调用者就知道该怎么传参了。
所以才有了上面的写法。
下面我们把类中属性的定义补充完整并定义一个对象出来:
3
接着就可以创造一个对象出来了:
这句话就创建出来了一个具体的人,并且给这个人起了个名字叫小明,指定了小明的年龄为20,并且将小明这个对象赋值给了变量p,此时p就表示小明这个人(对象)
p = Person('小明', 20)
既然我们是编程世界的神,当然想造什么样的人都可以
1
比如造一个200岁的叫杰拉考的人:
p = Person(‘杰拉考', 200)
这句话后面的Person('杰拉考', 200)用于创建出了一个对象(人),并且调用了__init__(self,name,age)方法完成了该人的属性的初始化,杰拉考赋值给了name,200赋值给了age属性。
那self呢?self不需要传参,上面我们说过,self,表示对象本身,谁调用,就表示谁,此时的self就表示你Person('杰拉考', 200)创造出来的那个对象,也即是p。
也即,我们创造出了p,然后给p的属性赋了值,此时p就表示拥有属性值之后的