example06.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. """
  2. 抽象类 / 继承 / 多态
  3. """
  4. from abc import ABCMeta, abstractmethod
  5. class Employee(metaclass=ABCMeta):
  6. """员工"""
  7. def __init__(self, name):
  8. self.name = name
  9. @abstractmethod
  10. def get_salary(self):
  11. """结算月薪"""
  12. pass
  13. class Manager(Employee):
  14. """部门经理"""
  15. def get_salary(self):
  16. return 15000
  17. class Programmer(Employee):
  18. """程序员"""
  19. def __init__(self, name):
  20. super().__init__(name)
  21. self._working_hour = 0
  22. @property
  23. def working_hour(self):
  24. return self._working_hour
  25. @working_hour.setter
  26. def working_hour(self, _working_hour):
  27. self._working_hour = 0 if _working_hour < 0 \
  28. else _working_hour
  29. def get_salary(self):
  30. return 200 * self.working_hour
  31. class Salesman(Employee):
  32. """销售员"""
  33. def __init__(self, name):
  34. super().__init__(name)
  35. self._sales = 0
  36. @property
  37. def sales(self):
  38. return self._sales
  39. @sales.setter
  40. def sales(self, _sales):
  41. self._sales = 0 if _sales < 0 else _sales
  42. def get_salary(self):
  43. return 1800 + 0.05 * self.sales
  44. def main():
  45. """主函数"""
  46. emps = [
  47. Programmer("王大锤"), Manager("武则天"),
  48. Programmer("狄仁杰"), Salesman("白洁"),
  49. Programmer("白元芳"), Salesman("冷面")
  50. ]
  51. for emp in emps:
  52. if isinstance(emp, Programmer):
  53. emp.working_hour = int(input(f'{emp.name}本月工作时间: '))
  54. elif isinstance(emp, Salesman):
  55. emp.sales = float(input(f'{emp.name}本月销售额: '))
  56. print("%s本月工资为: ¥%.2f元" % (emp.name, emp.get_salary()))
  57. if __name__ == '__main__':
  58. main()