Skip to content

【练习】员工薪资

项目简介

  • 员工系统

知识模块

  • Python 编程语言

知识点

  • 实例方法、实例属性、类属性
  • 构造方法、封装、继承、多态

受众

  • 初级测试开发工程师
  • 初级Python开发工程师

作业要求

设计一个简单员工系统设计,包括不同类型的员工(如全职员工和兼职员工)。每个员工有不同的薪资计算方法

解题思路

  1. 创建一个Employee(员工)类,拥有一个抽象方法计算薪资的方法calculate_salary()。
  2. 创建一个FullTimeEmployee(全职员工)类,继承自Employee类,实现calculate_salary()方法来计算全职员工的薪资。
  3. 创建一个PartTimeEmployee(兼职员工)类,继承自Employee类,实现calculate_salary()方法来计算兼职员工的薪资。
  4. 实例化一个FullTimeEmployee对象,设置工时为160,时薪为100,调用calculate_salary()方法计算并打印出全职员工的薪资。
  5. 实例化一个PartTimeEmployee对象,设置工时为80,时薪为50,调用calculate_salary()方法计算并打印出兼职员工的薪资。 提示: - 可以使用abstractmethod装饰器定义抽象方法。 - 全职员工的薪资计算方法:薪资 = 工时 * 时薪 - 兼职员工的薪资计算方法:薪资 = 工时 * 时薪

完整代码

#创建员工类
class Employee:
    def __init__(self, hours, hourly_rate):
        self.hours = hours
        self.hourly_rate = hourly_rate

    def calculate_salary(self):
        pass


#创建全职员工类
class FullTimeEmployee(Employee):
    def __init__(self, hours, hourly_rate):
        super().__init__(hours, hourly_rate)  # 调用父类的构造方法来初始化属性

    def calculate_salary(self):
        return self.hours * self.hourly_rate  # 根据工时和时薪计算薪资

#创建兼职员工类
class PartTimeEmployee(Employee):
    def __init__(self, hours, hourly_rate):
        super().__init__(hours, hourly_rate)  # 调用父类的构造方法来初始化属性

    def calculate_salary(self):
        return self.hours * self.hourly_rate  # 根据工时和时薪计算薪资

full_time_employee = FullTimeEmployee(160, 100.5)  # 创建一个全职员工对象假设工作时长是160小时,薪资是100小时
full_time_salary = full_time_employee.calculate_salary()  # 调用全职员工对象的计算薪资方法
print("全职员工的薪资是:", full_time_salary)  # 打印全职员工的薪资

part_time_employee = PartTimeEmployee(80, 50)  # 创建一个兼职员工对象
part_time_salary = part_time_employee.calculate_salary()  # 调用兼职员工对象的计算薪资方法
print("兼职员工的薪资是:", part_time_salary)  # 打印兼职员工的薪资

代码讲解

  1. 定义父类

    class Employee:
        def __init__(self, hours, hourly_rate):
            self.hours = hours
            self.hourly_rate = hourly_rate
    
        def calculate_salary(self):
            pass
    
    • 这部分定义了一个基类 Employee,其中包含了构造函数 __init__,该构造函数接收员工的的时长和薪资作为参数,并将它们存储为对象属性。还定义了一个未实现的 calculate_salary 方法,它在基类中只是一个占位符方法。
  2. 定义子类

    class FullTimeEmployee(Employee):
        def __init__(self, hours, hourly_rate):
            super().__init__(hours, hourly_rate)  # 调用父类的构造方法来初始化属性
    
        def calculate_salary(self):
            return self.hours * self.hourly_rate  # 根据工时和时薪计算薪资
    
    • 这部分定义了 FullTimeEmployee 子类,它继承自基类 Employee。它的构造函数使用 super().__init__来调用基类的构造函数,从而初始化继承的属性。calculate_salary 方法被重写,实现计算功能
    • PartTimeEmployee 子类与 FullTimeEmployee 子类类似
  3. 实例对象

    full_time_employee = FullTimeEmployee(160, 100.5)  # 创建一个全职员工对象假设工作时长是160小时,薪资是100小时
    full_time_salary = full_time_employee.calculate_salary()  # 调用全职员工对象的计算薪资方法
    print("全职员工的薪资是:", full_time_salary)  # 打印全职员工的薪资
    
    part_time_employee = PartTimeEmployee(80, 50)  # 创建一个兼职员工对象
    part_time_salary = part_time_employee.calculate_salary()  # 调用兼职员工对象的计算薪资方法
    print("兼职员工的薪资是:", part_time_salary)  # 打印兼职员工的薪资
    
    • 实例化了不同类型的员工对象,即 FullTimeEmployeePartTimeEmployee。然后,调用了它们的 make_sound 方法,由于多态性的存在,实际上调用了每个子类中不同的 calculate_salary 方法,分别输出不同的薪资