python实验报告5 面向对象应用

一、实验内容

题目1:类别统计

设计一个函数def func(*args), 用来统计当前文件中方法、函数、Animal类对象的个数(用中文和阿拉伯数字输出最后结果)。

import inspect
class Animal:
    def __init__(self, name):
        self.name = name

    def em(self):
        pass

def func(*args):
    functions = 0
    methods = 0
    animals = 0
    for item in args:
        if inspect.isfunction(item):
            functions += 1
        elif inspect.ismethod(item):
            methods += 1
        elif isinstance(item, Animal):
            animals += 1
    print('函数数量为:', functions)
    print('方法数量为:', methods)
    print('Animal类数量为:', animals)


def example1(s):
    print(s)
    pass


cat = Animal('猫')
dog = Animal('狗')

func(cat, dog.em, example1)

题目2:类的创建

(1)创建一个Person类,在构造函数中初始化姓名name、年龄age属性,创建有返回值的get_name方法获取人的姓名,有返回值的get_age函数获取人的年龄;

(2)创建Student类继承Person类的属性和方法,在构造函数中调用基类的构造函数初始化共有的name、age属性,并将Student类独有的成绩属性course(包括语文、数学、英语三门成绩)进行初始化。创建有返回值的get_MaxScore方法用来返回3门科目中的最高分数。使用实例s1 = Student(‘小明’,18,[93,68,76])对Student类的三种方法进行测试,并输出结果,将结果截图。

class Person:
    def __init__(self, name, age):
        self.name = '张三'
        self.age = 18

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age


class Student(Person):
    def __init__(self, name, age, course):
        super().__init__(name, age)
        self.course = course

    def get_MaxScore(self):
        return max(self.course)

    def __str__(self):
        return str(self.name) + ' ' + str(self.age) + ' ' + str(self.course)


s1 = Student('小明', 18, [93, 68, 76])
print(s1)
print('姓名:',s1.get_name())
print('年龄:',s1.get_age())
print('最高分数:', s1.get_MaxScore())

题目3:创建子类

如下现有一个保险政策类InsurancePolicy。

class InsurancePolicy:

  def __init__(self, price_of_item):

    self.price_of_insured_item = price_of_item

1)创建子类:交通险VehicleInsurance,构造方法中通过super将保额存储到实例变量中,同时用实例变量vehicle_Name存储交通工具的名字。创建一个实例方法get_rate(),返回回报率:保额*0.001

2)创建子类:家庭险HomeInsurance。构造方法中通过super将保额存储到实例变量中,同时用实例变量member_number存储家庭成员的人数。创建一个实例方法get_rate(),返回回报率:保额*0.00005

class InsurancePolicy:
    def __init__(self, price_of_item):
        self.price_of_insured_item = price_of_item


class VehicleInsurance(InsurancePolicy):
    def __init__(self, price_of_item, vehicle_Name):
        super().__init__(price_of_item)
        self.vehicle_Name = vehicle_Name

    def get_rate(self):
        rate = self.price_of_insured_item * 0.001
        return rate


class HomeInsurance(InsurancePolicy):
    def __init__(self, price_of_item, member_number):
        super().__init__(price_of_item)
        self.member_number = member_number

    def get_rate(self):
        rate = self.price_of_insured_item * 0.0005
        return rate

v=VehicleInsurance(5000,'小汽车')
print('交通险回报率:',v.get_rate())

h=HomeInsurance(1000000,4)
print('家庭险回报率:',h.get_rate())

 题目4:添加实例方法

1)定义学生类Student,构造方法的两个参数name和year,将它们保存为实例变量。

创建一个对象:Jerry,5年级。

2)定义成绩类Grade,并定义及格线属性:passing为60。

添加构造方法,通过参数传值给实例变量score。

3)Student类的构造方法中,声明一个空的成绩列表grades。

在Student中添加一个方法add_grade(Grade),该方法需要首先验证传入的参数类型是否为Grade,正确的话可以添加到成绩列表中,否则不执行添加操作。

4)创建5个Grade对象,成绩分别为100,90,85,88,70分,并将它们到Jerry的成绩列表里。

5)Grade中添加is_passing方法,返回该成绩是否及格。

6)Student中添加一个返回该生的平均成绩的方法get_average().

7)判断Jerry是否有不及格成绩。

8)输出Jerry的平均成绩。

import statistics


class Grade:
    passing = 60

    def __init__(self, score):
        self.score = score

    def is_passing(self):
        return self.score >= Grade.passing


class Student:
    def __init__(self, name, year):
        self.name = name
        self.year = year
        self.grades=[]

    def add_grade(self, grade):
        if isinstance(grade, Grade):
            self.grades.append(grade)

    def get_average(self):
        if not self.grades:
            return 0
        total_score=sum(grade.score for grade in self.grades)
        return total_score/len(self.grades)


g1 = Grade(100)
g2 = Grade(90)
g3 = Grade(85)
g4 = Grade(88)
g5 = Grade(70)

jerry = Student('Jerry', '5年级')

jerry.add_grade(g1)
jerry.add_grade(g2)
jerry.add_grade(g3)
jerry.add_grade(g4)
jerry.add_grade(g5)

has_failing_grade=any(not grade.is_passing() for grade in jerry.grades)
average_score=jerry.get_average()

print('Jerry是否有不及格成绩:',has_failing_grade)
print('Jerry的平均成绩:',average_score)

 二、实验总结

 1.在Python中,术语“方法”和“函数”通常用于描述可调用的代码块,但它们在使用和上下文中有一些区别。

函数(Function):

函数是一段可重复使用的代码块,可以通过函数名调用。

函数可以是内建函数(例如len(),print()等),也可以是用户自定义的函数。

函数可以被独立定义和调用,不依赖于任何对象。

函数定义形式如下:

def my_function(arg1, arg2):

        # 函数体

        return result

方法(Method):

方法是与对象关联的函数,通过对象的属性来调用。

在Python中,几乎所有东西都是对象,包括数字、字符串、列表、类实例等。

方法与函数类似,但是它是对象的一部分,通过对象的引用调用。

方法的调用形式如下:

object.method(arg1, arg2)

2.inspect 模块是 Python 的一个内建模块,它提供了一系列用于收集对象信息的工具。这些对象可能包括模块、类、实例、函数等。inspect 模块的功能可以用于获取源代码、获取函数或方法的参数信息、检查对象的类型以及获取堆栈信息等。

3.由于 passing 是一个类变量,你需要通过 Grade.passing 来引用它,而不是直接使用 passing。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值