Python是一种面向对象的编程语言,因此它支持面向对象编程(Object Oriented Programming,简称OOP)。
面向对象编程是一种常用的编程思想,是大多数编程语言都具备的特性,包括PHP、Java、C++、C#、RuBy、Perl等也都支持面向对象的特性,它强调万物皆对象,因此在编程时我们可以将现实世界中的事物抽象成程序中的对象,从而更好实现软件的设计与开发。与传统的基于函数的编程不同,面向对象编程注重于将数据状态与行为封装在一起,每个对象既包含数据状态,还包含可调用的行为方法。
面向对象的官方解释为: 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。
1、面向对象编程中的“对象”
现实世界是由很多很多“对象”组成的,我们可以理解为每一种事物就是一个对象。比如一个人、一辆车、一台电脑等都是一个对象。在计算机世界里,我们用虚拟的编程代码将现实世界的具体事物全部看成一个一个的对象来解决实际问题,将每一个对象简单处理为两个部分——属性和行为。
对象具有属性,它可以称为数据状态,还可以称为变量。正如每个人都有姓名、年龄、身高、体重等属性,我们可以用这些数据来描述对象的属性。如下图所示:
同一类的对象虽然都具有相同的属性,但是其中每个对象各自的属性值并不相同,比如每个人的姓名和外貌特征各不相同。如下图所示:
对象具有行为,也可以称为方法,就如同每个人都要运动、吃饭、睡觉一样,如下面图中所示。面向对象编程中把实现某个功能的代码块定义为方法,方法可以被其他程序调用,也可以被对象自身调用。比如,每个大人可以自己吃饭,小孩子可以被大人喂饭。
同样,每个对象各自的行为也是不相同的,比如每个人吃饭的行为不同,有的吃米饭,有的吃面条,如下图所示。
上面的例子中,实际的“小陈”和“小红”对象,都具有“人”的属性和行为,这里的“人”就是面向对象编程中“类”。
2、面向对象编程中的“类”
顾名思义,“类”就是相同类似“对象”的统称。前面提到的“人”就是一种“类”,每个人就代表“人”这种“类”的对象,都有姓名、年龄、身高、体重等属性,每个人也都有运动、吃饭、睡觉等行为。类是对象的抽象,对象则是类的实际化、具体化,每个对象都包含了类中定义的属性和行为。如下图所示:
我们可以说“类”是“对象”的模板,“对象”是“类”的具体实现。“类”与“对象”的关系即模板与产品:模板只能有一个,但产品可以有很多个。不同的“类”之间的属性和行为都是不同的,如下图所示:
在Python编程语言中,“类”的属性是以成员属性(也可称为成员变量)来定义的,“类”的行为是以成员方法来定义的。