1.面向对象思想

在认识类之前,我们需要理解面向对象思想和面向过程思想。

面向过程思想:要拥有一间房屋,面向过程像是自己来修盖房屋,如果需要经过选址、购买材料、砌墙、装修等步骤,面向过程编程,就相当于自己个人来负责这些事情,需要考虑屋子选在什么地方修建,要哪些材料,怎么砌墙,怎么装修等。每一步都需要自己来考虑,然后按照步骤一步一步实施。

面向对象思想:同样拥有一间房屋,但是面向对象更符合现实,类似于专业的人做专业的思想,选址、购买材料、砌墙等步骤由开发商这个对象来完成,作为我们个人自己不需要去考虑这些步骤具体如何实施,对于装修我们可以交给装修公司这个对象来完成,我们个人自己也不需要去考虑具体步骤如何实施,我们个人要做的只是去选择其中某个开发商修建的某套房屋即可,某个装修公司的某个装修方案即可。放在Python编程中,相当于开发商具有提供毛坯房的函数,装修公司有装修方案的函数,我们需要屋子的时候,直接可以去调用开发商的毛坯房函数、需要装修就去调用装修公司的装修方案函数。

所以面向对象思想的编程方式,更符合现实世界钟的事物和情景,面向过程的思想略显复杂,需要考虑过程中的每一步

2.创建类

在面向对象编程中,编写表示现实世界中的事物和情景,我们需要用到类,由类创建对象。类的话类似于上面例子中的开发商的共性信息集合,对象的话类似于就是具体到某个开发商的具体信息集合。使用面向对象编程可更加逼真的模拟现实情景。

使用类几乎可以模拟任何东西。下面我们就编写一个表示人的简单类,类的话表示的不是特定的人,而是任何一个人,里面编写的都是人的共性信息集合。

其语法格式:

我们新建一个people的.py文件,并编写程序如下所示:

通过上面的程序编写我们发现有以下几点:

1.有四个def关键字代表的函数,在类中的函数我们称为类的方法,前面学到的有关函数的一切都适用于方法,我们定义了初始化方法__init__、吃饭方法eat、睡觉方法sleep、学习方法study,虽然只是输出了一条语句,但是我们可以根据需求,继续扩展,这里只是举下例子。

2.init方法,是类的初始化方法,这个一个特殊的方法,每当根据人的类去创建人的实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

3.__init__方法声明时有两个形参变量,self和name。其中self是必不可少的,还必须位于其他形参变量的前面。因为Python调用__init__方法来创建人的类所对应的人的实例时,将自动传入实参self。所以我们在向People这个类的实例对象传递实参变量数据时,只需传递name,self会自动传递,我们不需要手动传递它

4.每个与类相关联的方法调用都自动传递实参变量self,它是指向实例本身的引用,让实例能够访问类中的属性和方法,属性在这里就相当于name。

5.self.name = name这条语句,以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。这些变量叫做类的属性

3.创建实例

实例是类的对象,可将类视为有关如何创建实例的说明。People类是实例人的一系列说明,让Python知道如何创建表示特定人的实例。

其语法格式:

变量名 = 类名(实参变量1,实参变量2,,,,,实参变量n)

编写程序如下所示:

我们看到输出结果是一个People object说明这是一个People的对象

如果想输出people这个示例的属性信息,可以在People类编写一个__str__方法,这个其实是重写父类方法,后期会有所介绍。

编写程序如下所示:

这里需要注意的是方法__init__方法并未显式地包含return语句,但Python自动返回一个表示人的实例,我们将这个实例存储在变量people中。

4.访问类属性

要访问实例的属性,可使用句点表示法。

其语法格式:

实例变量名.类属性名

编写程序如下所示:

句点表示法在Python中很常用,这种语法演示了Python如何获悉属性的值。在这里Python先找到实例people,再查找与这个实例相关联的属性name,因为加self前缀的变量,就是与实例相关联的变量,这里找的就是self.name,因为此时self.name的值为’张三’,所以输出结果即为’张三’

5.调用类方法

句点表示法不仅可以用来访问类属性,也可用来访问类方法。

其语法格式:

实例变量名.类方法

编写程序如下所示:

6.创建多个实例

我们创建多个人的实例,输出他们的名字并且输出他们正在干什么

编写程序如下所示:

每个人都是独立的一个实例,有自己的一组属性,能够执行相同的操作。我们可以根据一个类创建任意数量的实例。