Files
-------/PyCharmMiscProject/emp_pak/EmpSys.py
T

105 lines
4.4 KiB
Python
Raw Normal View History

2026-09-19 15:00:19 +08:00
# 步骤 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'))