Python编程基础与科学计算
上QQ阅读APP看书,第一时间看更新

3.2.1 类和对象介绍

1.类和对象的概念

上节介绍了自定义函数。自定义函数建立好后,可以多次调用,输入不同的参数会得到不同结果。建立自定义函数先创建一个函数(def关键字定义),这个函数也可以理解成有一定功能的模板,一次定义后可以无限次调用。我们研究真实物体或抽象物体时,也可以把具有相同特征和属性的物体定义成一个模板,例如大街上行驶的各式各样的汽车有不同的颜色、尺寸、功率、速度、品牌,虽然不同汽车的具体特征值不同,但是所有汽车都有这些特征。我们可以先把描述所有汽车的特征总结出来,如所有的汽车都有颜色、尺寸、功率、速度、品牌,还有一些功能,如按下开启键可以启动发动机,踩加速踏板可以加速,踩制动踏板可以降速。把汽车所具有的特征和功能进行总结并定义成一个汽车模板,然后再调用这个模板定义具体的汽车,同时给具体的汽车传递真实的特征值或属性值,如颜色、尺寸、功率、速度和品牌等值,这样就形成了一辆真实的有特征、有功能的汽车。汽车模板可以一次定义多次使用,用汽车模板创建各式各样的汽车,避免了重复定义汽车特性和功能,减少了编写汽车代码的工作量,也增强了程序的可读性。再比如对于人的描述,人有姓名、年龄、性别、身高、体重等特征,还具有走、写字、动脑筋等功能,把人的这些特征和功能定义成一个模板,再用这个模板定义一个具体的人,如男人、女人、老人、小孩等。类也可以理解成一个盖房子的图纸(模板),按照图纸可以建造很多房子。

上面提到的建立汽车模板和人的模板的过程反映到程序编码上就是创建汽车的类和人的类,再用汽车的模板或人的模板(也就是类)来创建各式各样的汽车或人,就是类的实例化或者类的对象,用图纸建造房子也是类的实例化。类就是有一些共有特征和功能的事物的模板,对象就是用模板来创建的各种具体的实物。下面的代码是汽车类car的定义,用变量记录各种特征或属性,用函数定义各种功能,同时用car类定义了两辆汽车jietuCar和xingyueCar,并给这两辆汽车传递了具体的属性值,例如jietuCar汽车的颜色是黑色,xingyueCar汽车的颜色是红色,同时这两辆汽车有start()、break()和accelerate()功能,或者称为方法。当然可以用汽车类car定义更多的汽车。面向对象最重要的概念就是类(class)和实例(instance),必须牢记类是由同类事物抽象出来的模板,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同类型的属性和方法,但各自具体的属性是不同的。

2.类的特点

首先,类具有封装性或者密封性。在类中需要定义一些函数,这些函数是对象的功能或方法,可以通过对象和函数名来执行函数实现一定的功能,例如汽车类实例jietuCar,通过jietuCar.start()可以执行start()功能,但是如何实现start()功能对外是不可见的,只能通过start()调用该功能,而不能修改实现该功能的代码,从而保护代码的密封性。例如按一下鼠标和键盘上的键就可以使计算机完成一些动作,对于如何实现这些动作,使用者无须知道详情,这也是一种封装性。

其次,类具有继承性。在一个类(父类)中定义好的属性和方法(功能)通过继承可以直接移植到另外一个新类(子类)中,同时新类中还可以添加新的属性和新的方法,用新类实例化产生一个对象时,该对象同时具有两个类所有的属性和方法。例如下面的代码,创建了类truck,并继承car的属性和方法,在truck中新添加了load属性和drag()方法,用truck类创建了oumanTruck对象,oumanTruck对象有car和truck的所有属性和方法,print()输出从car继承来的name、color和新建的load属性。

最后,类还有多态性。子类可以从多个父类进行继承,子类除了继承父类的属性和方法外,还可以覆盖或改写父类的方法,以体现子类与父类的变异性。同一方法在不同的类中可以有不同的解释,产生不同的执行结果,称为多态性。