| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- """
- 抽象类 / 方法重写 / 多态
- 实现一个工资结算系统 公司有三种类型的员工
- - 部门经理固定月薪12000元/月
- - 程序员按本月工作小时数每小时100元
- - 销售员1500元/月的底薪加上本月销售额5%的提成
- 输入员工的信息 输出每位员工的月薪信息
- Version: 0.1
- Author: 骆昊
- Date: 2018-03-12
- """
- from abc import ABCMeta, abstractmethod
- class Employee(object, metaclass=ABCMeta):
- def __init__(self, name):
- self._name = name
- @property
- def name(self):
- return self._name
- @abstractmethod
- def get_salary(self):
- pass
- class Manager(Employee):
- # 想一想: 如果不定义构造方法会怎么样
- def __init__(self, name):
- # 想一想: 如果不调用父类构造器会怎么样
- super().__init__(name)
- def get_salary(self):
- return 12000
- class Programmer(Employee):
- def __init__(self, name):
- super().__init__(name)
- def set_working_hour(self, working_hour):
- self._working_hour = working_hour
- def get_salary(self):
- return 100 * self._working_hour
- class Salesman(Employee):
- def __init__(self, name):
- super().__init__(name)
- def set_sales(self, sales):
- self._sales = sales
- def get_salary(self):
- return 1500 + self._sales * 0.05
- if __name__ == '__main__':
- emps = [Manager('武则天'), Programmer('狄仁杰'), Salesman('白元芳')]
- for emp in emps:
- if isinstance(emp, Programmer):
- working_hour = int(input('请输入%s本月工作时间: ' % emp.name))
- emp.set_working_hour(working_hour)
- elif isinstance(emp, Salesman):
- sales = float(input('请输入%s本月销售额: ' % emp.name))
- emp.set_sales(sales)
- print('%s本月月薪为: ¥%.2f元' % (emp.name, emp.get_salary()))
|