在认识类之前,我们需要理解面向对象思想和面向过程思想。
面向过程思想:要拥有一间房屋,面向过程像是自己来修盖房屋,如果需要经过选址、购买材料、砌墙、装修等步骤,面向过程编程,就相当于自己个人来负责这些事情,需要考虑屋子选在什么地方修建,要哪些材料,怎么砌墙,怎么装修等。每一步都需要自己来考虑,然后按照步骤一步一步实施。
面向对象思想:同样拥有一间房屋,但是面向对象更符合现实,类似于专业的人做专业的思想,选址、购买材料、砌墙等步骤由开发商这个对象来完成,作为我们个人自己不需要去考虑这些步骤具体如何实施,对于装修我们可以交给装修公司这个对象来完成,我们个人自己也不需要去考虑具体步骤如何实施,我们个人要做的只是去选择其中某个开发商修建的某套房屋即可,某个装修公司的某个装修方案即可。放在Python编程中,相当于开发商具有提供毛坯房的函数,装修公司有装修方案的函数,我们需要屋子的时候,直接可以去调用开发商的毛坯房函数、需要装修就去调用装修公司的装修方案函数。
所以面向对象思想的编程方式,更符合现实世界钟的事物和情景,面向过程的思想略显复杂,需要考虑过程中的每一步
在面向对象编程中,编写表示现实世界中的事物和情景,我们需要用到类,由类创建对象。类的话类似于上面例子中的开发商的共性信息集合,对象的话类似于就是具体到某个开发商的具体信息集合。使用面向对象编程可更加逼真的模拟现实情景。
使用类几乎可以模拟任何东西。下面我们就编写一个表示人的简单类,类的话表示的不是特定的人,而是任何一个人,里面编写的都是人的共性信息集合。
其语法格式:
我们新建一个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为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。这些变量叫做类的属性
实例是类的对象,可将类视为有关如何创建实例的说明。People类是实例人的一系列说明,让Python知道如何创建表示特定人的实例。
其语法格式:
变量名 = 类名(实参变量1,实参变量2,,,,,实参变量n)
编写程序如下所示:
我们看到输出结果是一个People object说明这是一个People的对象
如果想输出people这个示例的属性信息,可以在People类编写一个__str__方法,这个其实是重写父类方法,后期会有所介绍。
编写程序如下所示:
这里需要注意的是方法__init__方法并未显式地包含return语句,但Python自动返回一个表示人的实例,我们将这个实例存储在变量people中。
要访问实例的属性,可使用句点表示法。
其语法格式:
实例变量名.类属性名
编写程序如下所示:
句点表示法在Python中很常用,这种语法演示了Python如何获悉属性的值。在这里Python先找到实例people,再查找与这个实例相关联的属性name,因为加self前缀的变量,就是与实例相关联的变量,这里找的就是self.name,因为此时self.name的值为'张三',所以输出结果即为'张三'
句点表示法不仅可以用来访问类属性,也可用来访问类方法。
其语法格式:
实例变量名.类方法
编写程序如下所示:
我们创建多个人的实例,输出他们的名字并且输出他们正在干什么
编写程序如下所示:
每个人都是独立的一个实例,有自己的一组属性,能够执行相同的操作。我们可以根据一个类创建任意数量的实例。