面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的。
1、面向对象概述
面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系统就存在什么样的实体。
例如,在真实世界的学校里,会有学生和老师实体,学生有学号、姓名、所在班级等属性(数据),学生还有学习、提问、吃饭和走路等操作。学生只是抽象的描述,这个抽象的描述称为“类”。在学校活动的是学生个体,即张同学、李同学等,这些具体的个体称为“对象”,对象也称为“实例”。
在现实世界有类和对象,软件世界也有面向对象,只不过他们会以某种计算机语言编写的程序代码形式存在,这就是面向对象编程。
2、面向对象三个基本特性
面向对象思想有三个基本特性:封装性、继承性和多态性。
- 封装性
面向对象的封装使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不需要关心对象的内部细节,操作对象变得简单。
- 继承性
举例,轮船与客船的关系,客船具有轮船的全部特征和行为。
在面向对象中,轮船是一般类,客船是特殊类,特殊类拥有一般类的全部数据和操作,称为特殊类继承一般类。一般类称为“父类”或“超类”,特殊类称为“子类”或“派生类”。
- 多态性
多态性是指在父类中成员被子类继承之后,可以具有不同的状态或表现行为。
3、类和对象
Python中的数据类型都是类,类是组成Python程序的基本要素,它封装了一类对象的数据和操作。
- 定义类
Python语言中一个类的实现包括类定义和类体。
类定义语法格式如下:
class 类名 [(父类)]:
类体
其中,class是声明类的关键字,“类名”是自定义的类名,应该遵守Python命名规范,采用大驼峰法命名。“父类”声明当前继承的父类,父类可以省略声明,表示直接继承object类。
演示:
class Student(object):
# 类体
pass
注意:上述代码声明了一个学生类,它继承了object类,object是所有类的根类,在Python中任何一个类都直接或间接的继承object,所以(object)部分代码可以省略。
pass语句什么操作都不执行,用来维持程序结构的完整,进行占位。
- 创建和使用对象
一个对象的生命周期包括三个阶段:创建、使用和销毁。销毁对象时Python的垃圾回收机制释放不再使用的内存,不需要程序员负责。程序员只需关心创建和使用对象。
创建对象代码演示:
class Student(object):
# 类体
pass
student = Student()
print(student)
结果:
解释:Student()表达式创建了一个学生对象,并把创建的对象赋值给student变量,student是指向学生对象的一个引用。通过student变量可以使用刚刚创建的学生对象。print函数打印对象输出。事实上,print函数调用了对象的_str_()方法输出字符串信息,str()方法是object类的一个方法。
- 实例变量
类成员展示: