【练习】员工薪资
项目简介
- 员工系统
知识模块
- Python 编程语言
知识点
- 实例方法、实例属性、类属性
- 构造方法、封装、继承、多态
受众
- 初级测试开发工程师
- 初级Python开发工程师
作业要求
设计一个简单员工系统设计,包括不同类型的员工(如全职员工和兼职员工)。每个员工有不同的薪资计算方法
解题思路
- 创建一个Employee(员工)类,拥有一个抽象方法计算薪资的方法calculate_salary()。
- 创建一个FullTimeEmployee(全职员工)类,继承自Employee类,实现calculate_salary()方法来计算全职员工的薪资。
- 创建一个PartTimeEmployee(兼职员工)类,继承自Employee类,实现calculate_salary()方法来计算兼职员工的薪资。
- 实例化一个FullTimeEmployee对象,设置工时为160,时薪为100,调用calculate_salary()方法计算并打印出全职员工的薪资。
- 实例化一个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) # 打印兼职员工的薪资
代码讲解
-
定义父类
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
方法,它在基类中只是一个占位符方法。
- 这部分定义了一个基类
-
定义子类
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
子类类似
- 这部分定义了
-
实例对象
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) # 打印兼职员工的薪资
- 实例化了不同类型的员工对象,即
FullTimeEmployee
和PartTimeEmployee
。然后,调用了它们的make_sound
方法,由于多态性的存在,实际上调用了每个子类中不同的calculate_salary
方法,分别输出不同的薪资
- 实例化了不同类型的员工对象,即