12
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
|
||||
# 步骤 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'))
|
||||
Reference in New Issue
Block a user