首页 > 编程语言 >Python 实验五 面向对象程序设计

Python 实验五 面向对象程序设计

时间:2024-11-16 15:19:15浏览次数:3  
标签:__ Python self 面向对象 score print 程序设计 方法 def

实验五 面向对象程序设计

一、实验学时: 2学时

二、实验目的

  1. 掌握:Python类的定义,class关键字,创建对象的方法,访问对象中的成员。
  2. 掌握:私有成员与公有成员,数据成员与成员方法,类方法与静态方法,属性的定义与使用,混入机制。
  3. 掌握:继承的作用与Python实现。
  4. 掌握:构造函数 __ init __ (),析构函数__ del __ (),__ dd __ ()、__ mul __ ()、__ pow __ ()及其他Python类特殊方法与运算符的对应关系。

三、实验内容

  1. 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数,类的方法如下所述:

​ (1)列表项列表项获取学生的姓名。get_name(),返回类型:str。

​ (2)获取学生的年龄。get_age(),返回类型:int。

​ (3)返回3门科目中最高的分数。get_course(), 返回类型:int。

(4)类定义好之后,可以定义同学测试如下: zm = Student(‘zhangming’,20,[69,88,100]);返回结果: zhangming 20 100

  1. 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。

  2. 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。

  3. 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。

  4. 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。

四、实验结果

(在此部分列出保持缩进格式的程序代码及运行结果截图,请注意保持格式统一,截图清晰,大小合适)

  1. 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数,类的方法如下所述:

​ (1)列表项列表项获取学生的姓名。get_name(),返回类型:str。

​ (2)获取学生的年龄。get_age(),返回类型:int。

​ (3)返回3门科目中最高的分数。get_course(), 返回类型:int。

(4)类定义好之后,可以定义同学测试如下: zm = Student(‘zhangming’,20,[69,88,100]);返回结果: zhangming 20 100

代码块:
# 程序名:test5.1
# 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。

# 日 期:2023.4.29
# 思 路:利用类的特性编写相应的函数即可

class Student:

    def __init__(self, name, age, course):
        self.name = name
        self.age = age
        self.course = course

# 列表项列表项获取学生的姓名    
    def get_name(self):
        name = self.name

        print("学生的姓名为:", name)
        return str(name)

 # 获取学生的年龄
    def get_age(self):
        age = self.age

        print("学生的年龄为:", age)
        return int(age)

 # 返回3门科目中最高的分数
    def get_course(self):
        max_ = 0
        for i in self.course:
            if i > max_:
                max_ = i

        print("3门科目分数最高的分数是:", max_)
        return int(max_)

zm = Student('zhangming',20,[69, 88, 100])

zm.get_name()
zm.get_age()
zm.get_course()

  1. 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。

    代码块:
    # 程序名:test5.2
    # 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。
    # 作 者:王鑫
    # 学 号:20222501792
    # 日 期:2023.4.29
    # 思 路:利用类的特性编写相应的函数即可
    
    import math
    class Circle:
        def __init__(self, center, radius, color):
            self.center = center
            self.radius = radius
            self.color = color
    
        def show(self):
            print("圆的圆心为:",self.center)
            print("圆的半径为:",self.radius)
            print("圆的面积为:",self.color)
    
    # 计算圆的面积
        def get_Area(self):
    
            area = self.radius * self.radius * math.pi
            print("圆的面积为:", float(area))
    
    # 计算圆的周长
        def get_Perimeter(self):
    
            perimeter = self.radius * math.pi * 2
            print("圆的周长为:", float(perimeter))
    
    c = Circle((0,0), 5, "红色")
    c.show()
    c.get_Area()
    c.get_Perimeter()
    
    
  2. 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。

    代码块:
    # 程序名:test5.3
    # 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。
    
    # 日 期:2023.4.29
    # 思 路:利用类的特性编写相应的函数即可
    
    class Student:
    
        def __init__(self, name, age, sex, English_score, Math_score, Chinese_score):
            self.name = name
            self.age = age
            self.sex = sex
            self.English_score = English_score
            self.Math_score = Math_score
            self.Chinese_score = Chinese_score
            
    # 计算总分
        def total_score(self):
            sum_ = self.English_score + self.Math_score + self.Chinese_score
            print("总分为:",sum_)
    
    # 计算平均成绩
        def average_score(self):
            sum_ = self.English_score + self.Math_score + self.Chinese_score
            ave = sum_/3
            print("平均成绩为:", ave)
    
    # 输出学生信息
        def show(self):
            print("学生的姓名为:", self.name)
            print("学生的年龄为:", self.age)
            print("学生的性别为:", self.sex)
            print(f"学生的英语成绩为:{self.English_score}, 学生的数学成绩为:{self.Math_score}, 学生的语文成绩为:{self.Chinese_score}")
    
    stu1 = Student("张三", 19, "male", 88, 90,91)
    
    stu1.show()
    stu1.total_score()
    stu1.average_score()
    
    
  3. 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。

    代码块:
    # 程序名:test5.4
    # 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。
    
    # 日 期:2023.4.29
    # 思 路:利用类的特性编写相应的函数,再利用super()函数调用父类方法即可。
    
    class Person:
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    # 父类的personInfo()函数        
        def personInfo(self):
            print("姓名为:", self.name)
            print("年龄为:", self.age)
            print("性别为:", self.sex)
    
    class Student(Person):
    
        def __init__(self, name = '', age = 19, sex = 'male', collage = "", group = ""):
    
    # 利用super()函数调用父类方法
            super(Student, self).__init__(name, age, sex)
            self.collage = collage
            self.group = group
    
    # 重写父类personInfo()函数
        def personInfo(self):
    
    # 利用super()函数调用父类方法输出信息
            super(Student, self).personInfo()
            print("学生的学院为:", self.collage)
            print("学生的班级为:", self.group)
    
    stu = Student("xx", 19, "male", "software", "22-6")
    
    stu.personInfo()
    
    
  4. 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。

    代码块:
    # 程序名:test5.5
    # 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。
    
    # 日 期:2023.4.29
    # 思 路:利用类的特性编写相应的函数即可。
    
    class Vehicle:
    
        def __init__(self, spend, size):
            self.spend = spend
            self.size = size
    
        def move(self):
    
            print(f"交通工具开始以{self.spend}m/s向前移动")
    
        def setSpend(self, spend_):
            self.spend = spend_
    
        def spendUp(self, increase):
            self.spend += increase
            print("速度增加后为:%d m/s" % self.spend)
    
        def spendDown(self, drop):
            self.spend -= drop
            print("速度增加后为:%d m/s" % self.spend)
    
        def show(self):
            print("该交通工具的当前的速度为:%d m/s" % self.spend)
            print("该交通工具的体积为:%d m^2" % self.size)
    
    car = Vehicle(20,100)
    car.move()
    car.show()
    x1 = int(input("请输入上升速度的变化量:"))
    car.spendUp(x1)
    car.show()
    x2 = int(input("请输入下降速度的变化量:"))
    car.spendDown(x2)
    car.show()
    
    

五、实验小结

(包括问题和解决办法、心得体会、意见与建议等)

问题和解决方法:

  1. 问题一:在访问类中的方法时,方法传递参数出现错误。
    解决方法:通过查询资料得知,方法需要传递self参数,传递后才能正常访问,更改后,程序正常运行。

  2. 问题二:在利用super()函数访问父类方法时,传递参数同样出现问题。
    解决方法:查询资料后,可以在super()里面先传一个子类的类名,再传一个子类的实例对象,也可以不传参,但是这种方法容易在多继承时出现问题。

  3. 问题三:在动态增加类方法时出现问题。
    解决方法:通过查询资料后得知,增加的方法不是具体类的方法,要是普通方法,更改后,程序正常运行。

心得体会:

  1. 方法是特殊的函数,在调用类中的方法时,是对象的引用,其中私有方法不能通过对象名直接调用。

  2. 在多继承中,如果多个父类中有相同名字的成员,且在子类中使用该成员时没有指定其所属父类,则会按照从左向右进行搜索。

  3. 问题二:在利用super()函数访问父类方法时,传递参数同样出现问题。
    解决方法:查询资料后,可以在super()里面先传一个子类的类名,再传一个子类的实例对象,也可以不传参,但是这种方法容易在多继承时出现问题。

  4. 问题三:在动态增加类方法时出现问题。
    解决方法:通过查询资料后得知,增加的方法不是具体类的方法,要是普通方法,更改后,程序正常运行。

心得体会:

  1. 方法是特殊的函数,在调用类中的方法时,是对象的引用,其中私有方法不能通过对象名直接调用。
  2. 在多继承中,如果多个父类中有相同名字的成员,且在子类中使用该成员时没有指定其所属父类,则会按照从左向右进行搜索。
  3. python中带下划线的变量名和方法名具有特殊含义,尤其是在类的定义中,用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员。

标签:__,Python,self,面向对象,score,print,程序设计,方法,def
From: https://blog.csdn.net/qq_72560062/article/details/143817673

相关文章

  • Python 实验六 文件操作
    实验六文件操作一、实验学时:2学时二、实验目的掌握:Python中有关文件读写的方法;掌握:与文件相关的函数与标准库的用法;掌握:内置函数open()用法,熟练运用with关键字;掌握:os、os.path、shutil标准库中常用函数的用法。三、实验内容创建一个程序,要求用户输入一个文件夹路径,程......
  • Java-面向对象(下)
    下面让我们继续学习面向对象类的继承在现有类的基础上去构建一个新的类。现有类叫做基类(baseclass)、超类(superclass)新的类叫做派生类(derivedclass)、子类(孩子类)(childclass)如果一个类想要继承另外一个类,需要用到extends关键字。class基类{}class子类extends......
  • #Java-面向对象进阶-1
    1.static静态属性static是Java中的一个修饰符,可用来修饰成员变量、成员方法a.静态变量被static修饰的成员变量称为静态变量静态变量被该类的所有成员共享调用方式:类名调用(推荐)对象名调用例:创建方法//在创建的类中:publicstaticStringname;调用:假设类为:Stud......
  • #Java-面向对象进阶-多态
    1.多态多态是面向对象三大特征之一,表示同类型的对象表现不同的形态表现形式:父类类型对象名称=子类对象;多态的前提:有继承关系有父类引用子类Fuf=newZi();有方法重写使用场景举例:当需要写一个注册的方法,但是这个方法要能实现不同对象的注册例如:老......
  • [Python学习日记-67] 封装
    [Python学习日记-67]封装简介如何隐藏类中的属性封装并不是单纯意义的隐藏封装与扩展性特性(property)简介        从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫、小狗、小王八和小猪一起装进麻袋,然后把麻袋封上口子。照这种逻辑看,封装起来的麻袋相当......
  • Python Requests模块全面教程
    PythonRequests模块全面教程在现代软件开发中,网络请求是一个不可或缺的部分。无论是获取网页数据、调用API接口,还是进行数据交互,都会涉及到HTTP请求。Python的Requests模块是一个非常强大的库,能够让我们轻松地发送HTTP请求并处理响应。本文将详细介绍Requests模块的使用,包......
  • Python读写Excel的全面教程
    Python读写Excel的全面教程在数据分析和处理的过程中,Excel是一个非常常用的工具。Python作为一种强大的编程语言,提供了多种库来进行Excel文件的读写操作。本文将详细介绍如何使用Python读写Excel文件,涵盖常用的库、基本操作、实例讲解以及一些高级技巧。一、环境准备在开......
  • Python 接口自动化Jsonpath 应用及断言
    jsonpath的应用:首先我们要知道,使用jsonpath之前我们要有一个对应的数据去进行对应的操作,比如我们工作中会得到的响应数据,基于我们的响应数据我们要对应的提取比如tokenmsg.....所以我们就会用到它jsonpath。那在Python中我们需要先按转第三方包安装命令pipinsta......
  • hadoop+Spark+基于python的大数据航班信息数据分析与可视化系统(源码+文档+调试+可视
    收藏关注不迷路!!......
  • 【Pytorch】Python random 模块
            Python random 模块主要用于生成随机数,是常用的一个包,random 模块实现了各种分布的伪随机数生成器。在训练传统机器学习模型或者深度神经网络模型的过程中经常会用到。要使用 random 函数必须先导入:importrandom1.random()        使用ra......