# 步骤 1:定义员工抽象类 Emp # ①创建抽象类 Emp # ②定义 get_info()抽象方法,规定后续继承该父类的子类都必须要实现get_info()方法 from abc import ABC,abstractmethod class Emp(ABC): @abstractmethod def get_info(self): pass # 步骤 2:定义员工类 Employee,这个类继承 Emp 抽象类 # ①创建类 Employee # ②添加类属性:company = "科技有限公司"(所有员工共享公司名) # ③初始化方法 __init__ 定义实例属性:name(姓名)、id(工号)、salary(工资) class Employee(Emp): company = "科技有限公司" def __init__(self,name,id,salary): self.name = name self.id = id self.salary = salary # 步骤 3:给Employee类添加基础方法,在 Employee 中实现三个方法: # ① get_info():返回员工信息字符串(姓名、工号、公司、工资) # ② calculate_bonus(绩效等级):该方法用来计算薪资 # 如果绩效输入的是A,返回薪资 salary + salary*0.3 # 如果绩效输入的是B,返回薪资 salary + salary*0.2 # 如果绩效输入的是C,返回薪资 salary + salary*0.1 # ③ fun_work(工作方式):通过实例去调用时,入参使用的工作方式,返回'xxx员工正在使用xxx的方式工作' def get_info(self): return self.name,self.id,self.company,self.salary def calculate_bonus(self,x): if x=='A': return self.salary + self.salary*0.3 elif x=='B': return self.salary + self.salary*0.2 elif x=='C': return self.salary + self.salary*0.1 def fun_work(self,a): return f'{self.name}员工正在使用{a}的方式工作' # 步骤 4:创建子类 Programmer(程序员),继承 Employee # ①继承 Employee # ②继承初始化方法,新增子类的实例属性:program_language(编程语言,如 Python/Java) # ③重写 get_info() 方法,查询所有属性的信息(多态:方法重写) class Programmer(Employee): def __init__(self,name,id,salary,python): super().__init__(name,id,salary) self.program_language=python def get_info(self): return self.name,self.id,self.company,self.salary,self.program_language def calculate_bonus(self,x): if x=='A': return self.salary + self.salary*1.5 elif x=='B': return self.salary + self.salary*1.49 elif x=='C': return self.salary + self.salary*1.45 # 步骤 5:创建子类 Manager(经理),继承 Employee # ①继承 Employee # ②继承 Employee 初始化方法,新增实例属性:department(管理部门) # ③重写 get_info() 方法,查询所有属性的信息 class Manager(Employee): def __init__(self,name,id,salary,department): super().__init__(name,id,salary) self.department=department def get_info(self): return self.name,self.id,self.company,self.salary,self.department def calculate_bonus(self,x): if x=='A': return self.salary + self.salary*0.2 elif x=='B': return self.salary + self.salary*0.1 elif x=='C': return self.salary # 步骤 6:实现多态(重写奖金计算) # ① Programmer 重写 calculate_bonus(绩效等级): # 如果绩效输入的是A,返回薪资 salary + salary*1.5 # 如果绩效输入的是B,返回薪资 salary + salary*1.49 # 如果绩效输入的是C,返回薪资 salary + salary*1.45 # ② Manager 重写 calculate_bonus(绩效等级): # 如果绩效输入的是A,返回薪资 salary + salary*0.2 # 如果绩效输入的是B,返回薪资 salary + salary*0.1 # 如果绩效输入的是C,返回薪资 salary # (父类、子类同名方法不同实现 = 多态) # ③ 通过一个统一的函数接口调用 get_info() 方法 # ④ 通过一个统一的函数接口调用 calculate_bonus(绩效等级) 方法 def get_info(i): return i.get_info() def calculate_bonus(j,x): return j.calculate_bonus(x) if __name__=='__main__': e1=Employee('老1',1,12000) p1=Programmer('老2',2,18000,'java') m1=Manager('老3',3,20000,'项目部') print(get_info(e1)) print(get_info(p1)) print(get_info(m1)) print(calculate_bonus(p1,'A')) print(calculate_bonus(e1,'B')) print(calculate_bonus(m1,'A'))