python面向对象程序设计

本文我们学习面向对象的程序设计,先学习几个基本概念。

对象包含2种特征:状态和行为。

类:某种类型集合的描述

属性:是类本身的一些特性,属性具体值则会根据每个对象的不同而不同。
方法:类所能实现的行为。

类的定义:
class className[(父类名)]:
    成员变量
    成员函数


父类名是可选的,子类继承父类后,子类将拥有父类的相应属性和方法。
用类定义对象,先调用__init__构造函数,用于初始化对象的各个属性。
销毁对象时,用__del__析构函数。

定义类的成员函数时,必须默认一个变量来代表类定义的对象本身,这个变量的名称可自行定义,下面的例子将使用self变量表示类对象的变量。

我们通过学生成绩计算来举例说明类的定义和数据操作。

python面向对象程序设计_第1张图片

GPA计算以4分为准则,学生的成绩是“A”(即4点),“B”(即3点),“C”(即2点),“D”(即1点),“E”(即0点),GPA的计算如下:

python面向对象程序设计_第2张图片

由上图可知,GPA=(所有科目的总点数)/(总学分)。
记录学生成绩的文件包含多个学生的记录,每个记录为一行,包括该学生的姓名,总学分和量分数(即所有科目的总点数),学生成绩表如下:

python面向对象程序设计_第3张图片

其中 ,第一列是姓名,第二列是某个学生所修课程的总学分,第三列是所修课程的总点数,GPA=(总点数)/(总学分)。

GPA算法描述如下:

python面向对象程序设计_第4张图片

下面的python3程序,通过读取文件,找出平均绩点最高的学生,然后输出他的姓名,总学分和平均绩点:

#找到GPA最高的学生
#创建一个Student类,每个Student类型的对象记录一个学生信息
class Student:
    def __init__(self,name,scores,qpoints):
        self.name=name
        self.scores=float(scores)#将字符串类型转换成float类型,便于做算术运算
        self.qpoints=float(qpoints)
        
    def getName(self):
        return self.name
    
    def getScores(self):
        return self.scores


    def getQPoints(self):
        return self.qpoints


    def gpa(self):
        return self.qpoints/self.scores


def makeStudent(infoString):
    name,scores,qpoints=infoString.split()
    return Student(name,scores,qpoints)


def main():
    #打开输入文件
    fileName=input('Enter name of the grade file:')
    f=open(fileName,'r')
    #设置文件中第一个学生为best
    best=makeStudent(f.readline())
    #处理文件中剩余的行数据
    for line in f:
        #将文件中的每一行数据转换为一个学生对象
        s=makeStudent(line)
        #如果该学生是目前GPA最高的,则记录下来
        if s.gpa()>best.gpa():
            best=s
    f.close()
    #打印GPA成绩最高的学生信息
    print('The best student is:',best.getName())
    print('scores:',best.getScores())
    print('GPA:',best.gpa())


if __name__=='__main__':
    main()

运行程序,输入输出如下:


最后,我们总结一下面向对象程序设计的基本步骤:

python面向对象程序设计_第5张图片

(完)


你可能感兴趣的:(python)