Python实验三:面向对象程序设计

Java——员工类2 Description 修改题目131的员工类,使得Employee类为抽象类,getSalary()方法是抽象方法 Input 经理的月工资 销售人员的基本工资 销售人员的提成 工人的工作天数 工人每天的工资 Output 经理的工资 销售人员的工资 工人的工资 Sample Input 12000 3000 5000 22 200 Sample Output 12... 阅读详情

1.定义一个类描述数字时钟

2.定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法

3.定义一个学生类,并通过继承定义一个研究生类,查看多态性展示效果

4.使用@property装饰器和property方法实现属性

5.静态方法和类方法:定义一个“三角形”类,通过传入三条边长来构造三角形,并提供计算周长和面积的方法,但是传入的三条边长未必能构造出三角形对象,因此我们可以先写一个方法来验证三条边长是否可以构成三角形,这个方法很显然就不是对象方法,因为在调用这个方法时三角形对象尚未创建出来。和静态方法比较类似,Python还可以在类中定义类方法,类方法的第一个参数约定名为cls,它代表的是当前类相关的信息的对象(类本身也是一个对象,有的地方也称之为类的元数据对象),通过这个参数我们可以获取和类相关的信息并且可以创建出类的对象。通过使用@staticmethod和@classmethod装饰器完成

6.所谓抽象类就是不能够创建对象的类,这种类的存在就是专门为了让其他类去继承它。Python从语法层面并没有像Java或C#那样提供对抽象类的支持,但是我们可以通过abc模块的ABCMeta元类和abstractmethod包装器来达到抽象类的效果,如果一个类中存在抽象方法那么这个类就不能够实例化(创建对象)。使用抽象类完成一下任务:
某公司有三种类型的员工 分别是部门经理、程序员和销售员。需要设计一个工资结算系统,根据提供的员工信息来计算月薪,部门经理的月薪是每月固定15000元;程序员的月薪按本月工作时间计算,每小时150元;销售员的月薪是1200元的底薪加上销售额5%的提成。

from math import sqrt
from time import sleep, time, localtime
from abc import ABCMeta, abstractmethod

"""
# 定义一个类描述数字时钟
使用@property装饰器和property方法实现属性"""


class Clock(object):
    def __init__(self, hour=0, minute=0, second=0):  # 初始化方法
        self.hour = hour
        self.minute = minute
        self.second = second

    @classmethod
    def now(cls):
        ctime = localtime(time())
        return cls(ctime.tm_hour, ctime.tm_min, ctime.tm_sec)

    def run(self):  # 走字
        self.second += 1
        if self.second == 60:
            self.second = 0
            self.minute += 1
            if self.minute == 60:
                self.minute = 0
                self.hour += 1
                if self.hour == 24:
                    self.hour = 0

    def show(self):  # 显示
        print("{}:{}:{}".format(self.hour, self.minute, self.second))
        return '%02d:%02d:%02d' % \
               (self.hour, self.minute, self.second)


"""定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法"""

class Point(object):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @property
    def y(self):
        return self._y

    @y.setter
    def y(self, value):
        self._y = value

    def move(self, dx, dy):
        self.x += dx;
        self.y += dy;

    def distance_to(self, Point):
        dx = self.x - Point.x
        dy = self.y - Point.y
        return sqrt(dx ** 2 + dy ** 2)

    def __str__(self):
        return '(%s,%s)' % (str(self.x), str(self.y))


"""定义一个学生类,并通过继承定义一个研究生类,查看多态性展示效果"""


class Student(object):

    def __init__(self, Sname, Sno, Sage):
        self.Sno = Sno
        self.Sname = Sname
        self.Sage = Sage

    @property
    def Sno(self):
        return self._Sno

    @Sno.setter
    def Sno(self, sno):
        self._Sno = sno

    @property
    def Sname(self):
        return self._Sname

    @Sname.setter
    def Sname(self, sname):
        self._Sname = sname

    @property
    def Sage(self):
        return self._Sage

    @Sage.setter
    def Sage(self, sage):
        self._Sage = sage

    def __str__(self):
        return '我叫%s,学号是%s,年龄为%s,是一名学生' % (str(self.Sname), str(self.Sno), str(self.Sage))

    def run(self):
        return '我叫%s,学号是%s,年龄为%s,是一名学生' % (str(self.Sname), str(self.Sno), str(self.Sage))


class Gra_student(Student):
    def __init__(self, Sno, Sname, Sage, Skey):
        super().__init__(Sno, Sname, Sage)
        self.Skey = Skey

    def __str__(self):
        return '我叫%s,学号是%s,年龄为%s,是一名研究生' % (str(self.Sname), str(self.Sno), str(self.Sage))


"""静态方法和类方法:定义一个“三角形”类"""


class Triangle(object):
    def __init__(self, a, b, c):
        self._a = a
        self._b = b
        self._c = c

    @staticmethod
    def is_valid(a, b, c):
        return a + b > c and b + c > a and a + c > b

    def perimeter(self):
        return self._a + self._b + self._c

    def area(self):
        half = self.perimeter() / 2
        return sqrt(half * (half - self._a) *
                    (half - self.b) * (half - self._c))


"""
使用抽象类完成一下任务:

某公司有三种类型的员工 分别是部门经理、程序员和销售员
"""


class Employee(object, metaclass=ABCMeta):
    """员工"""

    def __init__(self, name):
        """
        初始化方法
        :param name:
        """
        self._name = name

    @property
    def name(self):
        return self._name

    @abstractmethod
    def get_salary(self):
        """
        获得月薪
        :return:月薪
        """
        pass


class Manager(Employee):
    """部门经理"""

    def get_salary(self):
        return 15000.0


class Programmer(Employee):
    def __init__(self, name, working_hour=0):
        super().__init__(name)
        self.working_hour = working_hour

    @property
    def working_hour(self):
        return self._working_hour

    @working_hour.setter
    def working_hour(self, working_hour):
        self._working_hour = working_hour if working_hour > 0 else 0

    def get_salary(self):
        return 150.0 * self._working_hour


class Salesman(Employee):
    """销售员"""

    def __init__(self, name, sales=0):
        super().__init__(name)
        self._sales = sales

    @property
    def sales(self):
        return self._sales

    @sales.setter
    def sales(self, value):
        self._sales = value if value > 0 else 0

    def get_salary(self):
        return 1200.0 + self._sales * 0.05


def TestSalary():
    emps = [
        Manager('刘备'), Programmer('诸葛亮'),
        Manager('曹操'), Salesman('荀彧'),
        Salesman('吕布'), Programmer('张辽'),
        Programmer('赵云')
    ]
    for emp in emps:
        if isinstance(emp, Programmer):
            emp.working_hour = int(input('请输入%s本月工作时间: ' % emp.name))
        elif isinstance(emp, Salesman):
            emp.sales = float(input('请输入%s本月销售额: ' % emp.name))
        # 同样是接收get_salary这个消息但是不同的员工表现出了不同的行为(多态)
        print('%s本月工资为: ¥%s元' %
              (emp.name, emp.get_salary()))

def main():
    a, b, c = 3, 4, 5
    if Triangle.is_valid(a, b, c):
        t = Triangle(a, b, c)
        print(t.perimeter())
        print(t.area())
    else:
        print('无法构成三角形')


def main1():
    clock = Clock.now()
    while True:
        clock.show()
        # print(clock.show())
        sleep(1)
        clock.run()


def main2():
    P1 = Point()
    P2 = Point()
    P1.x = 0
    P1.y = 0
    print(P1.x, P1.y)
    P2.move(-1, -1)
    print(P2)
    print(P1)
    P3 = P1.distance_to(P2)
    print(P3)


def main3():
    s1 = Student('小明', 1001, 13)
    print(s1)
    s2 = Gra_student('小刚', 1002, 21, 'c009')
    print(s2)

Python中的面向对象程序设计 面向对象程序设计 面向对象程序设计是在面向过程程序设计的基础上发展而来的,它比面向编程具有更强的灵活性和扩展性,本次学习需要了解以下内容; ①了解什么是面向对象; ②掌握如何定义和使用类; ③掌握如何创建类的属性; ④掌握继承的基本语法; ⑤掌握方法重写; 1、面向对象概述 面向对象是一种设计思想,从20世纪60年代提出面向对象的概念到现在,它已经发展成为一种比较成熟的编程思想,并且逐步成为目前软... 阅读详情

相关推荐

实验9 面向对象程序设计方法

一、 实验目的 1、理解面向程序设计的基本概念 2、掌握类与对象的定义和使用方法 3、掌握类的继承和多态的实现方法 4、掌握面向对象程序设计的应用方法 二、 实验内容 1、写出程序的运行结果: 2、写出程序的运行结果: 3、定义一个 Circle 类,根据圆的半径求周长和面积。再由 Circle 类创建两个圆对象,其半径分别为 5 和 10,要求输出各自的周长和面积。请补充程序: 4、利用面向对象方法求 n!,并输出 10!的值。 5、定义change 类,用以实现角度和弧度之间的转换。 6、设计点类

weixin_46074899的博客 5507

Python面向对象程序设计(3道题)

1.设计一个Circle类来表示园,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为1~100的圆,并计算出相应的周长及面积。 class circle: def __init__(self,radius): self.radius=radius def length(self): return self.radius*2*3.14 def area(self): return self.radius**2*3.14 a

fjhkrje的博客 7715

实验题目:python面向对象程序设计

1、定义并实现一个矩形类Rectangle,其私有实例成员为矩形的左下角与右上角两个点的坐标,能设置左下角和右上角两个点的位置,能根据左下角与右上角两个点的坐标计算矩形的长、宽、周长和面积,另外根据需要适当添加其他成员方法和特殊方法(如构造方法)。实现并测试这个类。 class Rectangle: def __init__(self,New_zxx,New_zxy,New_ysx,New_ysy): self.zxx=New_zxx self.zxy=New_z

Zkang520的博客 5056

一个类的例子--员工工资

类的例子1.完整代码2.错误总结 从学习中写的一个类学习类的知识 1.完整代码 """ 问题: 某公司有三种类型的员工 分别是部门经理、程序员和销售员 需要设计一个工资结算系统 根据提供的员工信息来计算月薪 部门经理的月薪是每月固定15000元 程序员的月薪按本月工作时间计算 每小时150元 销售员的月薪是1200元的底薪加上销售额5%的提成 """ #abc库用来创建抽象类,即只可以继承,不能创建实例(三步:导库+step1+step2) from abc import ABCMeta,abstract

qq_44643484的博客 836

20224116 实验一《Python程序设计》实验报告

课程:《Python程序设计》班级:2241姓名: 肖闻良学号:20224116实验教师:王志强实验日期:2023年3月12日必修/选修: 公选课。

2301_81415981的博客 4005

20231318 实验一《Python程序设计》实验报告

课程:《Python程序设计》班级: 2313姓名: 傅述令学号:20231318实验教师:王志强实验日期:2024年3月13日必修/选修: 公选课。

Momingming232的博客 1680

JAVA编程假定要为某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资

(1)经理(Manager)——每月获得一份固定的工资 (2)销售人员(Salesman)——在基本工资的基础上每月还有销售提成。 (3)一般工人(Worker)——则按他每月工作的天数计算工资。 根据上述要求试用类的继承和相关机制描述这些功能,并编写一个Java Application程序。(提示:应设计一个雇员类(Employee)描述所有雇员的共同特性,这个类应该提供一个计算工资的抽象方法ComputeSalary( ),使得可以通过这个类计算所有雇员的工资。经理、销售人员和一般工人对应的类都应

y0205yang的博客 9242

python语言进阶之面向对象程序设计

python语言进阶之面向对象程序设计

weixin_73831735的博客 1378

Java抽象类和接口

1、// 定义抽象类1.1 定义Pet抽象类(abstract关键字)publicabstractclassPet{ //创建父类的私有属性 privateStringname; privateintage; privateinthealth; privateStringlove; publi...

weixin_33935505的博客 398

Python程序设计 第7章:Python面向对象编程

Python程序设计 第7章:Python面向对象编程7.1 面向对象编程概述7.1.1 OOP的产生7.1.2 OOP核心思想7.1.3 OOP特征7.2 类和对象7.2.1 类的创建7.2.2 对象的创建7.2.3 类的属性7.2.4 类的方法7.2.5 内部类7.2.6 魔术方法7.3 类间关系7.3.1 依赖关系7.3.2 关联关系7.3.3 继承关系7.4 总结 7.1 面向对象编程概述 7.1.1 OOP的产生 7.1.2 OOP核心思想 7.1.3 OOP特征 7.2 类和对象 7.2.1 类

若北辰 8081

面向对象程序设计

创建一个控制台应用程序:   要求:定义一个Time类,包括: (1)三个私有字段表示时,分,秒 (2)一个构造函数,通过传入的参数对时间初始化。再设计一个无参构造函数 (3)为三个字段分别建立只读属性 (4)创建一个方法用于秒增加1秒,并显示时间 采用抽象类和抽象方法实现薪水发放系统:    某公司有三类员工,经理(manager)、销售员(salesman)、工人(worker),他们的薪水计算方式不同,如下:    经理:  固定月薪。    销售员:固定月薪加上销售提成(月薪+销售额*5%)。    工人:  计时工资加加班费(每小时工资*小时数+加班时间*1.5*每小时工资)每周额定时长40小时。 雇员类(Employee)作为员工类的基类。计算薪水的方法为Earning()。编写测试类实现   说明:第2题只需在main()方法中,实现三类员工的实例化,并调用Earnin

Python程序设计 实验三 实验报告 (合肥工业大学 2023级)

实验三 Python基础——面向对象、文件处理 完整实验报告 合肥工业大学 2023级 Python程序设计课程。

Dulecam的博客 1320

5分钟搞定mmdetection3d多模态推理可视化:从KITTI数据集到3D检测结果展示

本文提供了一份快速上手MMDetection3D进行多模态推理可视化的实战指南。文章详细介绍了从环境搭建、KITTI数据集准备,到模型选择、配置解析,再到执行多模态推理并生成3D检测结果可视化的完整流程,旨在帮助开发者在30分钟内快速验证模型并直观展示检测效果。

weixin_29051149的博客 249

python面向对象实验报告_20192310 实验三《Python程序设计》实验报告

学号 2020-2021-1 《数据结构与面向对象程序设计》实验三报告课程:《程序设计与数据结构》班级: 1923姓名: 严嘉钰学号:20192310实验教师:王志强实验日期:2020年10月11日必修/选修: 必修1.实验内容初步掌握单元测试和TDD理解并掌握面向对象三要素:封装、继承、多态初步掌握UML建模完成蓝墨云上 (1)-(5)实验。2. 实验过程及结果单元测试新版的idea自带juni...

weixin_39753213的博客 2367

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面

本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。

weixin_28358083的博客 198

半导体制造技术导论(第二版)萧宏 第五章集成电路加热工艺答案

第二次退火是在较高温度下进行,并将电阻系数较高的c49碳化硅转变为电阻系数较低的c54碳。水平式高温炉加热、垂直式高温炉加热(即传统的管式炉加热)、快速加热工艺RTP、激光镭射。8. 集成电路芯片制造过程中,会使用垫底氧化层、阻挡氧化层、栅氧氧化层、屏蔽氧化层和全。氧化是最重要的加热过程之一,是一种添加工艺,将氧气加入到硅晶圆后,在晶圆表面形成二氧。为了满足元器件性能的要求,必须利用退火工艺将晶格的损伤修复,使其恢复单晶结构并激活掺。工艺氮气气流下将晶舟推入炉管,升高温度,稳定温度;

goal_achieving的博客 1864

python语言程序设计实验教程答案实验三_20194220 实验三《Python程序设计》实验报告...

20194220 2019-2020-2 《Python程序设计》实验三报告课程:《Python程序设计》班级: 1942姓名: 梁勇学号:20194220实验教师:王志强实验日期:2020年5月16日必修/选修: 公选课1.实验内容(1)内容:创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。(2)要求:(1)创建服务端和客户端...

weixin_31159439的博客 1万+

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(模型转换)

本文详细介绍了将YOLOv26 ONNX模型转换为RKNN模型的过程,适用于RK3588平台。主要内容包括:1)量化数据集的创建,通过随机抽取最多400张JPG图片生成校准数据集;2)ONNX转RKNN的完整脚本,支持多种量化方式和平台适配;3)模型转换的参考调用方式;4)模型结构对比展示。文章还提供了注意事项,强调量化数据集图片尺寸、mean/std值需与实际推理一致,并给出精度优化建议。该转换流程为YOLOv26模型在RK3588上的高效部署提供了完整解决方案。

qq_64366203的博客 1126

实验五 面向对象程序设计

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

大狸子的博客 1248

从零到一:Qt与PCL的跨平台开发环境搭建全攻略

本文详细介绍了从零开始搭建Qt与PCL跨平台开发环境的完整流程,涵盖Windows、Linux和macOS三大平台。重点解析了Qt5与Qt6版本选择、PCL库安装配置、VTK集成等关键技术要点,并提供跨平台CMake项目模板和常见问题解决方案,助力开发者快速构建三维点云处理应用。

weixin_29280657的博客 384

2026年VIVO嵌入式岗位高频面试题(含参考答案)

摘要:VIVO嵌入式岗位考核涵盖智能手机、IoT设备、芯片适配等方向,重点考察硬件底层交互、RTOS/Linux开发、C/C++功底与问题排查能力。题目按优先级排序,分硬件架构、RTOS、C/C++、数据结构、Linux实践、行业认知6大模块,共40道题。硬件部分涉及中断、ARM架构、加速技术、BSP开发等;RTOS部分区分硬/软实时系统;C/C++部分侧重内存管理、位操作;Linux部分考察常用命令;行业部分关注鸿蒙等系统理念。题目设计贴合实际工作场景,全面评估嵌入式开发能力。

Open 52

20231313实验三《Python程序设计》实验报告

与20231319的同学成功实现了通信!并且在原代码的基础上稍微改进一下,使服务端的同学可以直接通过下图中第一行和第二行代码来判断客户端是否上线,方便更好的实现”监视“交流!作为socket 服务端代码(永久/加密一次性)作为socket用户端代码(永久/一次性)DES对称加密算法下的socket通信。

qq_62532919的博客 914

YOLOv11改进 | 特殊场景检测篇 | 利用图像去雾网络UnfogNet改进yolov11图像雾天检测能力(全网独家首发改进)

本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv11针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv11的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可以忽略不计这是非常难得的,因为其也算是一种图像增强算法,同时本文的内容不影响其它的模块改进可以作为工作量凑近大家的论文里,非常的适用,图像去雾检测为群友最近提出的需要的改进。欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 1628

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

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

qq_72560062的博客 1258

嵌入式内存管理之“LittleFS文件系统”开发(附LittleFS项目源码)

本文介绍了如何在嵌入式系统中实现 LittleFS 文件系统,并结合 Flash 存储进行数据管理。通过详细的代码示例,展示了如何配置、挂载 LittleFS 文件系统,并进行文件操作,如读取、写入和更新数据。特别地,博客通过实际应用演示了如何实现启动计数功能,以及如何处理文件系统的格式化和挂载过程。该示例帮助读者掌握在资源受限的嵌入式环境中实现高效文件存储管理的关键技术。

Bit_Dong的博客 3185

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python实验三答案_20162120 《Python程序设计》实验三 实验报告

20162120 2019-2020-2 《Python程序设计》实验三报告课程:《Python程序设计》班级: 1621姓名: 郑智辉学号:20162120实验教师:王志强实验日期:2020年5月16日必修/选修: 公选课1.实验内容创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。要求:(1)创建服务端和客户端,选择一个通信端...

weixin_39867212的博客 2562

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Python变量的下划线
下一篇: 习题笔记:编译原理目标代码生成
ArtinCode
博客等级 码龄9年 23粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值