工资结算系统:
部门经理 - 15000/月
程序员 - 200/小时
销售员 - 1800底薪 + 5%销售额
"""
面向对象的四大支柱: 抽象、封装、继承、多态
抽象 - 定义类的过程就是提取共性的抽象过程
数据抽象 - 找到对象的静态特征 - 属性 - 找名词
行为抽象 - 找到对象的动态特征 - 方法 - 找动词
封装 - 将数据和操作数据的方法从逻辑上组成一个整体 - 对象
隐藏实现细节 暴露简单的调用接口
继承 - 从已有的类创建新类的过程
提供继承信息的称之为父类 得到继承信息的称之为子类
多态 - 调用相同的方法做了不同的事情 - 同样的方法在运行时表现出不同行为
子类重写父类方法 不同的子类给出不同的实现版本
"""
from abc import ABCMeta, abstractmethod
class Employee(object, metaclass=ABCMeta):
"""员工(抽象类)"""
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name or '无名氏'
@abstractmethod
#使用abstractmethod方法就只能继承不能调用
def get_salary(self):
"""获得月薪"""
pass
class Manager(Employee):
"""部门经理"""
def get_salary(self):
return 15000
class Programmer(Employee):
"""程序员"""
def __init__(self, name):
self.working_hour = 0
super().__init__(name)
def get_salary(self):
return 200 * self.working_hour
class Salesman(Employee):
"""销售员"""
def __init__(self, name):
self.sales = 0
super().__init__(name)
def get_salary(self):
return 1800 + self.sales * 0.05
def main():
emps = [
Manager("曹操"), Programmer("荀彧"),
Programmer("郭嘉"), Salesman("张辽")
]
for emp in emps:
if isinstance(emp, Programmer):
hour = int(input(f'请输入{emp.name}本月工作时间: '))
emp.working_hour = hour
elif isinstance(emp, Salesman):
sales = float(input(f'请输入{emp.name}本月销售额: '))
emp.sales = sales
print(f'{emp.name}本月工资为: {emp.get_salary()}元')
if __name__ == '__main__':
main()
网友评论