面向对象编程Python程序设计
目录2第一节面向对象的概念第二节类与对象第三节迭代器第四节运算符重载第五节面向对象程序设计第六节继承
第一节面向对象的概念
面向对象编程面向对象编程(ObjectOrientedProgramming,OOP)是一种计算机编程架构。面向对象编程的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成的。面向对象方法解决问题的思路就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系。一般来说,面向对象方法是一种运用一系列面向对象的指导软件构造的概念和原则(如类、对象、抽象、封装、继承、多态、消息等)来构造软件系统的开发方法。从本质上讲,面向对象方法是对这些概念和原则的应用。4
类与对象的概念一般来说,世界上万事万物都可以看作是一个对象。这些现实中的实体也被称为客观对象。客观对象可以抽象其某些属性和方法来研究在某个问题或场景中的性质,这被称为问题对象。抽象出来的问题对象通过封装等过程称为计算机中的一个包含数据和操作的集合体,这被称为计算机对象。一个对象应该是一个具有状态、行为和标识符的实体,并且对象之间往往可以通过通信进行交互。对象是存在于某个时空的具体实体,而类则是拥有共同的结构、行为和语义的一组对象的抽象。例如,可以定义一个“哺乳动物”类,所有满足全身披毛、恒温胎生、体内有膈的脊椎动物对象都属于该类。类可以作为对象的一种描述机制,用来刻画一组对象的公共属性与公共行为,也可以用来作为程序的一个单位,用来形成程序中更大的模块。5
面向对象编程的产生面向对象方法是在传统的结构化设计方法出现很多问题的情况下应运而生的。传统的结构化设计方法侧重于计算机处理事情的方法和能力,面向对象方法则从客观世界存在的事物进行抽象,更符合人类的思维习惯。另外,面向对象方法通过封装、继承、多态等手段,在不同层次上提供各种代码复用,以此提高代码的利用率。这些优势使得面向对象方法得到了更广泛的应用。C++、Python、Java等编程语言都支持面向对象的编程。6
第二节类与对象
定义一个类在Python中,一切数据都是对象。我们已经了解了多种数据类型,但如果需要自己定义一种数据类型呢?例如,需要定义一个数据类型来存放某学校教务平台中的学生信息,这个数据类型要存储学生的学号、姓名、就读院系、选课列表等信息。Python语句class类名:语句块1语句块2......8在Python中,可以用一个Student类来定义这个数据类型,通过这个类创建多个实例来表示不同的学生对象。类和对象的关系就好像数据类型和变量的关系。各个对象可以同属于一个类,但拥有彼此独立的属性。对象是类的实例,可以创建类的多个对象。创建类的一个实例的过程被称为实例化。
类的定义在进入类的定义部分后,Python解释器会创建一个新的命名空间作为局部作用域,因此所有类中创建的属性(包括数据和函数)都成为这个新命名空间中的局部变量。一个Python类使用变量来存储数据,使用方法来完成动作。但是在Python中对数据成员的定义比C++等语言要灵活,可以随时进行定义。因此类的定义中包含的语句通常为函数定义,但是其他语句也是允许的。9
类定义的例子10在代码中,类名StudentInfo紧跟在关键字后,并跟随一个冒号。在类的内部先定义了函数__init__(第5~8行)。这个函数是预定义在类中的方法属性,就像一个模块中预定义的__name__属性一样。__init__函数是一个特殊的方法,它会在创建一个类的对象时执行,一般用来初始化类中的数据属性,作用相当于C++中的构造函数。
类定义的例子11代码还定义了几个类的方法函数。setID函数和setName函数分别用来设置学生的学号和姓名;selectCourse函数用来向学生的选课列表中添加一门课程;getPersonalInfo函数将学生的学号和姓名合成为一个元组并返回。可以注意到类中每个方法的第一个参数都是self。Python规定,类的成员函数的第一个参数表示的是调用函数的对象。self这个名称是约定俗成的结果而不是强制性的,将代码中的self替换为任意合法标识符均可以正确执行。本书将在下一小节具体介绍关于self参数的内容。
构造类的对象一旦定义了一个类,就可以创建一个该类的对象。Python在构造对象时要完成两个任务:一是在内存中创建一个对象,二是自动调用类的__init__函数来初始化对象。其中的