Python 面向对象程序设计类的使用、继承等

2023-10-29

这个实验主要通过了解对象、类、封装、继承、方法、构造函数和析构函数等面向对象的程序设计的基本概念,掌握 Python 类的定义、类的方法、类的继承等。
在做实验时要注意__init__(应该是4个下划线,前后各两个),也要注意自己的属性条件,并且也可以适当的修改格式使得输出美观

实验1:设计一个 Circle 类来表示圆,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为 1~100 的圆,并计算出相应的周长及面积。
实验代码:

class Circle:
    def __init__(self,r): #定义_init_方法,将r属性绑上去
        self.setR(r)
    def setR(self,r):
        if r < 1 or r > 100:
            raise Exception('r must be 1>r<100 ') #触发异常
        self._r = r
    def getR(self):
        return self._r
    def getArea(self):
        return 3.14 * self._r**2  
    def getPerimeter(self):
        return 3.14 * 2 * self._r
    def show(self):
        print(self.getR(), '    ', self.getArea(), '    ', '%.2f' %self.getPerimeter()) 
         #进行半径、面积、周长的显示并且设置了周长的输出格式
if __name__ == '__main__':
    print("半径    面积      周长")  #可以使输出格式更加的美观
    c = Circle(5)
    c.show()

实验结果:
在这里插入图片描述
2、编写程序并测试,有一个汽车类 Vehicle,类中的私有数据成员为车轮个数wheels 和车重 weight;小车类 Car 是汽车类 vehicle 派生类,其中包含载客人数passenger_load,默认 4 人;卡车类 Truck 是汽车类 vehicle 派生类,其中包含载客人数 passenger_load 和载重量 payload。
实验代码:

class Vehicle(object):
    def __init__(self, wheels, weight):  #初始绑定
        self.setWheels(wheels)
        self.setWeight(weight)
    def setWheels(self, wheels):
        if type(wheels) != int:  #判断wheels类型是否为整型
            raise Exception('wheels must be int') #输出错误
        self._wheels = wheels  #将wheels属性绑定
    def setWeight(self, weight):
        if type(weight) != int:
            raise Exception('weight must be int')
        self._weight = weight
    def getWeight(self):  #get方法返回车重
        return self._weight
    def getWheels(self):  #返回车轮个数
        return self._wheels
    def display(self):  #结果的显示
        print(self.getWheels(),'        ',self.getWeight())  #显示车轮个数和车重

class Car(Vehicle):
    def __init__(self, wheels, weight, passenger_load = 4):
        super(Car, self).__init__(wheels, weight)
        Vehicle.__init__(self, wheels, weight)
        self.setPassenger(passenger_load)
    def setPassenger(self, passenger_load):
        if type(passenger_load) != int:
            raise Exception('passenger_load must be int')
        self._passenger_load = passenger_load
    def getPassenger(self):
        return self._passenger_load
    def display(self):
        super(Car, self).display()  #调用Vehicle的display()显示车轮个数和车重
        print('汽车可载乘客个数%d' %self.getPassenger())  #显示乘客个数

class Truck(Vehicle):
    def __init__(self, wheels, weight, passenger_load, payload):
        super(Truck, self).__init__(wheels, weight)
        Vehicle.__init__(self, wheels, weight)
        self.setPassenger(passenger_load)
        self.setPayload(payload)
    def setPassenger(self, passenger_load):
        if type(passenger_load) != int:
            raise Exception('passenger_load must be int')
        self._passenger_load = passenger_load
    def setPayload(self, payload):
        if type(payload) != int:
            raise Exception('payload must be int')
        self._payload = payload
    def getPayload(self):
        return self._payload
    def getPassenger(self):
        return self._passenger_load
    def display(self):
       #调用Vehicle的display()显示车轮个数和车重
        super(Truck, self).display() 
        print('卡车载客个数:%d' %self.getPassenger())  #显示乘客个数
        print('卡车载重重量:%d' %self.getPayload())  #显示载重重量

 if __name__ == '__main__':
    print("车轮个数    车重    ")
    # vehicle=Vehicle(0,100)  可以显示也可以不用显示
    # vehicle.display()
    car=Car(4,200)
    car.display()
    truck=Truck(8,500,4,5000)
    truck.display()

实验结果:
在这里插入图片描述

3、编写一个学生和教师数据输入和输出的程序。学生数据包括编号、姓名、班号、和成绩;教师的数据含有编号、姓名、职称和部门。要求设计一个 person 类,作为学生数据操作类 student 和教师数据操作类 teacher 的基类。

```python
class Person(object):
    def __init__(self, number, name):
        self.setNumber(number)
        self.setName(name)
    def setNumber(self, number):
        if type(number) != int:
            raise Exception('number must be int')
        self._number = number
    def setName(self, name):
        #if not isinstance(name,str):
        if type(name) != str:
            raise Exception('name must be string')
        self._name = name
    def getName(self):
        return self._name
    def getNumber(self):
        return self._number
    def display(self):
        print(self.getNumber(), self.getName(), end = " ")

class Student(Person):
    def __init__(self, number, name, classNumber, grade):
        super(Student, self).__init__(number, name)
        Person.__init__(self, number, name)
        self.setClassNumber(classNumber)
        self.setGrade(grade)
    def setClassNumber(self, classNumber):
        if type(classNumber) != int:
            raise Exception('classNumber must be int')
        self._classNumber = classNumber
    def setGrade(self, grade):
        if type(grade) != int or grade > 100 or grade < 0:
             raise Exception('grade must be int and 0=<grade<=100 ') #触发异常
        self._grade = grade
    def getClassNumber(self):
        return self._classNumber
    def getGrade(self):
        return self._grade
    def display(self):
        super(Student, self).display()
        print(self.getClassNumber(), self.getGrade())

class Teacher(Person):
    def __init__(self, number, name, title, department):
        super(Teacher, self).__init__(number, name)
        Person.__init__(self, number, name)
        self.setTitle(title)
        self.setDepartment(department)
    def setTitle(self, title):
        if type(title) != str:
            raise Exception('title must be string')
        self._title = title
    def setDepartment(self, department):
        if type(department) != str:
            raise Exception('department must be string')
        self._department = department
    def getTitle(self):
        return self._title
    def getDepartment(self):
        return self._department
    def display(self):
        super(Teacher, self).display()
        print(self.getTitle(), self.getDepartment())

if __name__  ==  '__main__':
    print('学号          姓名')
    Zhangsan = Student(12345678911, '张三', 232, 100)
    Zhangsan.display()
    teacher = Teacher(20000000000, 'li', '教授', 'AI')
    teacher.display()

实验结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 面向对象程序设计类的使用、继承等 的相关文章

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • Android 日志分析01-命令篇

    我回来了 很久没更新博客了 各种原因吧 但现在我决定回归博客 继续写写文章 分享分享技术 用过很多语言 涉及前后端 一时也不知从何讲起 往后慢慢梳理吧 慢慢把自己想分享的东西写下来 也是一种整理和记录吧 今天先分享Android知识 分享一
  • automake创建Makefile

    autoconf automake主要用于创建makefile 本文主要介绍一下automake的简单用法 Ubuntu下安装automake sudo apt get install automake 即可安装automake的相关工具
  • win10安装Mathtype报错处理,找不到MPlugin.dll

    在Mathtype官方中文网下载mathtype后 双击exe文件进行安装 不使用默认安装路径 安装后会弹出如下错误 由于找不到MPlugin dll 无法继续执行代码 重新安装程序可能会解决此问题 查看mathtype的安装目录 可以发现
  • CSDN社区之星专访:我的蜕变之路

    摘要 社区之星第49期采访了爱奇艺研发总监陆其明 他分享了个人生涯 管理和程序员素养等方面的看法 管理上他认为对人要领导 要管的是事 而在程序员素养上 他则引用Jeff Atwood的话称 成为优秀程序员的方法就是抛开编程 原文链接 htt
  • SRNet:Deep Residual Network for Steganalysis of Digital Images

    Abstract 现有的网络架构包括手工设计元素 比如固定域或限制卷积核 关键 有效扩展检测器前端 计算噪声残差 池化会不可避免地压制隐写噪声 在频域中有一个较好的结果 相对空域 更进一步提升是将选择通道作为第二通道 I 介绍 1 隐写术介
  • Ubuntu16.04桌面突然卡住怎么办?

    不知道有没有小伙伴和我一样 正在Ubuntu上工作呢 突然桌面就卡住了 键盘也没了反应 鼠标那个箭头只能移动 但是点击时却没有反应 作为一个Ubuntu小白 在最近的学习过程中遇到了好多问题 我把这些问题需要注意的地方记录下来 希望可以帮助
  • JMC性能监测

    文章目录 一 打开JMC 二 界面说明 三 配置java监测 四 总结 性能监测图形化 通过jdk自带的JMC工具即可轻松实现 JMC的全称为java mission control 意思为java程序任务控制台 一 打开JMC 在你下载好
  • 图解通信原理与案例分析-9:SFP光通信案例--数字信号的2-ASK光调制解调

    文本以SFP光模块的内部实现为案例 介绍数字电信号的光信号调制解调的基本原理 即如何把二进制的数字电信号调制到光信号上进行传输 反之 如何从光信号中解调出二进制的数字电信号 这部分的调制解调 完全是有SFP硬件实现的 不需要软件的编码 1
  • 关于Qt关闭程序但保持程序后台运行的坑(非常棘手)

    1 先说说我的后台程序的应用场景 关闭当前程序 隐藏 调用另一个ui ui的类型是悬浮窗 Qt Tool 并且在系统通知栏可以见到图标 后台程序逻辑都正常执行 2 实现后台运行的两种主要方式 1 重写closeEvent 并设置event
  • javaswing 设置背景图片

    背景图片的路径用自己的 改一下 package com gao import java awt import java awt event ActionEvent import java awt event ActionListener i
  • 树莓派不能上网解决方案

    判断自己的树莓派能不能上网 用这条命令试试 ping www baidu com ping www baidu com Temporary failure in name resolution 出现了以上错误 说明树莓派不能上网 解决思路
  • css3实现hover颜色,背景色,宽度等平滑变动(transition)

  • webpack 和html-webpack-plugin版本对应问题

    为了实现功能 配置生成预览页面 以前是 要实现的效果是 直接打开设置的首页 这里由于版本对应问题 一直报错 当前版本 devDependencies html webpack plugin 2 30 1 webpack 3 6 0 webp
  • idea使用lombok插件不能生效的原因

    要成功的使用lombok插件 需要3个步骤 一 需要先在idea中下载Lombok plugin 点击File gt settings gt plugins gt 然后点击以下图中所示 接着 在输入框输入lombok进行搜索 之后点击安装便
  • 粤嵌GEC6818-学习笔记2-屏幕相关及音频播放

    这里写目录标题 LCD屏幕 简介 操作 打开屏幕 映射 如何让plcd指向屏幕首地址 BMP图片的解析 把一张BMP格式的图片显示在我们的开发板上 触摸板的相关操作 练习 获取屏幕坐标 线程进程 练习 创建广告播放的一个线程 音频播放 播放
  • STM32——GPIO输入——按键检测

    硬件介绍 当按键置空时 IO接地 按键按下之后 IO口接通3 3V高电压 电流比较大 为了避免损坏IO 这里需要加装一个限流电阻 可以看到IO口是默认低电平 按键按下后产生一个上升沿 和平常的电路设计不太一样 这是因为PA0还具有一种自动唤
  • centos7网卡配置参数详细

    CentOS 7 中的网卡配置参数通常位于 etc sysconfig network scripts ifcfg
  • Python爬虫从入门到精通:(1)爬虫基础简介_Python涛哥

    第一章 爬虫基础简介 爬虫概述 前戏 你是否在夜深人静的时候 想看一些会让你更睡不着的图片 你是否在考试或者面试前夕 想看一些具有针对性的题目和面试题 你是否想在杂乱的网络世界获取你想要的数据 爬虫的价值 实际应用 就业 什么是爬虫 通过编
  • TensorFlow学习(4) 学习率调度 & 正则化

    1 学习率调度 恒定高学习率训练可能会发散 低学习率会收敛到最优解但是会花费大量时间 1 1 常用的学习率调度及其概念 幂调度 指数调度 分段调度 性能调度 1 2 实现幂调度 在创建优化器时 设置超参数decay 使用示例 optimiz
  • Python 面向对象程序设计类的使用、继承等

    这个实验主要通过了解对象 类 封装 继承 方法 构造函数和析构函数等面向对象的程序设计的基本概念 掌握 Python 类的定义 类的方法 类的继承等 在做实验时要注意 init 应该是4个下划线 前后各两个 也要注意自己的属性条件 并且也可