employee.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """
  2. 抽象类 / 方法重写 / 多态
  3. 实现一个工资结算系统 公司有三种类型的员工
  4. - 部门经理固定月薪12000元/月
  5. - 程序员按本月工作小时数每小时100元
  6. - 销售员1500元/月的底薪加上本月销售额5%的提成
  7. 输入员工的信息 输出每位员工的月薪信息
  8. Version: 0.1
  9. Author: 骆昊
  10. Date: 2018-03-12
  11. """
  12. from abc import ABCMeta, abstractmethod
  13. class Employee(object, metaclass=ABCMeta):
  14. def __init__(self, name):
  15. self._name = name
  16. @property
  17. def name(self):
  18. return self._name
  19. @abstractmethod
  20. def get_salary(self):
  21. pass
  22. class Manager(Employee):
  23. # 想一想: 如果不定义构造方法会怎么样
  24. def __init__(self, name):
  25. # 想一想: 如果不调用父类构造器会怎么样
  26. super().__init__(name)
  27. def get_salary(self):
  28. return 12000
  29. class Programmer(Employee):
  30. def __init__(self, name):
  31. super().__init__(name)
  32. def set_working_hour(self, working_hour):
  33. self._working_hour = working_hour
  34. def get_salary(self):
  35. return 100 * self._working_hour
  36. class Salesman(Employee):
  37. def __init__(self, name):
  38. super().__init__(name)
  39. def set_sales(self, sales):
  40. self._sales = sales
  41. def get_salary(self):
  42. return 1500 + self._sales * 0.05
  43. if __name__ == '__main__':
  44. emps = [Manager('武则天'), Programmer('狄仁杰'), Salesman('白元芳')]
  45. for emp in emps:
  46. if isinstance(emp, Programmer):
  47. working_hour = int(input('请输入%s本月工作时间: ' % emp.name))
  48. emp.set_working_hour(working_hour)
  49. elif isinstance(emp, Salesman):
  50. sales = float(input('请输入%s本月销售额: ' % emp.name))
  51. emp.set_sales(sales)
  52. print('%s本月月薪为: ¥%.2f元' % (emp.name, emp.get_salary()))