工资结算系统

from abc import ABCMeta, abstractmethod
"""
Python内置的isinstance函数来判断员工对象的类型。type函数也能识别对象的类型,
但是isinstance函数更加强大,因为它可以判断出一个对象是不是某个继承结构下的子类型

Python中没有定义抽象类的关键字,但是可以通过abc模块中名为ABCMeta 的元类来定义抽象类
对于暂时无法实现的方法,我们可以使用abstractmethod装饰器将其声明为抽象方法,
所谓抽象方法就是只有声明没有实现的方法,声明这个方法是为了让子类去重写这个方法
"""


class Employee(metaclass=ABCMeta):
    """员工"""

    def __init__(self, name):
        self.name = name

    @abstractmethod
    def get_salary(self):
        """结算月薪"""
        pass


class Manager(Employee):
    """部门经理"""

    def get_salary(self):
        return 15000.0


class Programmer(Employee):
    """程序员"""

    def __init__(self, name, working_hour=0):
        super().__init__(name)
        self.working_hour = working_hour

    def get_salary(self):
        return 200 * self.working_hour


class Salesman(Employee):
    """销售员"""

    def __init__(self, name, sales=0):
        super().__init__(name)
        self.sales = sales

    def get_salary(self):
        return 1800 + self.sales * 0.05


emps = [
    Manager('刘备'), Programmer('诸葛亮'), Manager('曹操'),
    Programmer('荀彧'), Salesman('吕布'), Programmer('张辽'),
]
for emp in emps:
    if isinstance(emp, Programmer):
        emp.working_hour = int(input(f'请输入{emp.name}本月工作时间: '))
    elif isinstance(emp, Salesman):
        emp.sales = float(input(f'请输入{emp.name}本月销售额: '))
    print(f'{emp.name}本月工资为: ¥{emp.get_salary():.2f}元')

  

posted @ 2023-05-10 22:51  ashuai~  阅读(80)  评论(0)    收藏  举报