Files
2026-09-19 15:00:19 +08:00

105 lines
4.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 步骤 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'))