【多态练习】员工薪资
项目简介
- 员工系统
知识模块
- Python 编程语言 L2
知识点
- 实例方法、实例属性、类属性
- 构造方法、封装、继承、多态
受众
- 初级测试开发工程师
- 初级 Python 开发工程师
作业要求
设计一个简单员工系统设计,包括不同类型的员工(如全职员工和兼职员工)。每个员工有不同的薪资计算方法
解题思路
- 创建一个 Employee(员工)类,拥有一个抽象方法计算薪资的方法
calculate_salary()。 - 创建一个 FullTimeEmployee(全职员工)类,继承自 Employee 类,实现
calculate_salary()方法来计算全职员工的薪资。 - 创建一个 PartTimeEmployee(兼职员工)类,继承自 Employee 类,实现
calculate_salary()方法来计算兼职员工的薪资。 - 实例化一个 FullTimeEmployee 对象,设置工时为 160,时薪为 100,调用
calculate_salary()方法计算并打印出全职员工的薪资。 - 实例化一个 PartTimeEmployee 对象,设置工时为 80,时薪为 50,调用
calculate_salary()方法计算并打印出兼职员工的薪资。
完整代码
#创建员工类
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方法,分别输出不同的薪资
- 实例化了不同类型的员工对象,即