定义一个抽象基类教师类Teacher由教师类派生出讲师Lecturer、副教授类AProf、教授类Prof教师的工资由基本工资、课时费和津贴构成。假设讲师、副教授、教授的基本工资分别是800、900、1000元课时费分别是每小时40、45、50元津贴由基本津贴和绩效津贴组成。基本津贴分别为1300、1800、2300讲师的绩效津贴为课时-基本课时2580副教授的绩效津贴为课时-基本课时30100+
from abc import ABC, abstractmethod
class Teacher(ABC):
def __init__(self, basic_salary, hour_fee, basic_allowance):
self.basic_salary = basic_salary
self.hour_fee = hour_fee
self.basic_allowance = basic_allowance
@abstractmethod
def salary(self):
pass
class Lecturer(Teacher):
def __init__(self):
super().__init__(800, 40, 1300)
self.hours = 0
def set_hours(self, hours):
self.hours = hours
def salary(self):
performance_allowance = max(0, (self.hours - 25) * 80)
total_salary = self.basic_salary + self.hour_fee * self.hours + self.basic_allowance + performance_allowance
return total_salary
class AProf(Teacher):
def __init__(self, guidance_number):
super().__init__(900, 45, 1800)
self.hours = 0
self.guidance_number = guidance_number
def set_hours(self, hours):
self.hours = hours
def salary(self):
performance_allowance = max(0, (self.hours - 30) * 100)
total_salary = self.basic_salary + self.hour_fee * self.hours + self.basic_allowance + performance_allowance + self.guidance_number * 100
return total_salary
class Prof(Teacher):
def __init__(self, guidance_number, research_equivalent):
super().__init__(1000, 50, 2300)
self.hours = 0
self.guidance_number = guidance_number
self.research_equivalent = research_equivalent
def set_hours(self, hours):
self.hours = hours
def salary(self):
performance_allowance = max(0, (self.hours - 36) * 100)
total_salary = self.basic_salary + self.hour_fee * self.hours + self.basic_allowance + performance_allowance + self.guidance_number * 100 + self.research_equivalent * 120
return total_salary
lecturer = Lecturer()
lecturer.set_hours(30)
print(lecturer.salary())
aprof = AProf(3)
aprof.set_hours(40)
print(aprof.salary())
prof = Prof(5, 2)
prof.set_hours(50)
print(prof.salary())
输出结果:
6300
7250
8650
原文地址: https://www.cveoy.top/t/topic/i9WU 著作权归作者所有。请勿转载和采集!