27 类和对象

面向对象编程,是日常常听到的一个词汇,啥意思?有人总结了一下面向对象编程的基本特征:

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类。对类进行实例化得到对象。

封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)

继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。

多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。

所以要说明白Python的面向对象编程,我感觉又欠Python一本书,需要说的很多。故本章就仅仅解释一下类和对象这两个名词就好了,抽象又具体,慢慢体会。

类class和对象object(有时又称实例对象instance of class)哲学逻辑就是理论和实践、抽象和具体的哲学关系,说的如此高大上。

什么是类?

类和对象的关系是马和白马哲学问题(等价命题“白马非马"),一个是抽象集合一个是具体实现的哲学逻辑。马是对所有具体的马匹的抽象和提炼升华,白马只是因某些马身体上的颜色是白色而特定的称这些马的描述性名词。白马是马这个类的具体实例化。

对象又是什么? 对象则是类的实例化、具体化。马是类(抽象概念),而白马则是马的一个实例对象(具体化实体化)。马用于描述所有活生生的所有马的共同特征:四个腿、尾巴,这些是马的属性特征。马会嘶鸣、能驮东西、能载人等等这些是马这种动物的功能特征。而白马则是一匹具体的马,除了上述特征外,它颜色是白色的,这就是马的具体实例化,驮人、载物得需要一匹活生生的真马来干。

把对象特有的特色,称之为特性、属性(对应于程序里的数据,体现为类里的实例变量),把对象可被操作(执行消息或接收消息),称之为方法(对应于程序里的术语体现为函数)。这些数据和函数、方法都和马直接有关,蚯蚓能驮人么?太小!一条腿的马可以驮人么?不行!容易摔下来,可见数据和函数直接相关且在一起,把数据和函数打个包放在一起就构成了类。类是抽象体,描述事物的特征(即数据)和功能(函数),而具体干活的还是需要真马来干的,即对象或者实例化对象,程序是干事儿的,所以程序了充满了实例化对象,所以常听到面向对象编程,而少有冒出面向类编程的说法。

最后,希望通过本章的讲述,您能够基本了解了类和对象这两个术语的意思。下一章我们就要真的进入Python的面向对象编程了。