美文网首页
员工系统

员工系统

作者: 李小萌mmm | 来源:发表于2018-11-19 20:35 被阅读0次

工资结算系统:
部门经理 - 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()

相关文章

网友评论

      本文标题:员工系统

      本文链接:https://www.haomeiwen.com/subject/kitzfqtx.html