105 lines
4.4 KiB
Python
105 lines
4.4 KiB
Python
|
||||
|
|
# 步骤 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'))
|