CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

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