python实战之多态与继承(简单工资管理系统)

python中的继承与多态与C++中的相类似,可以通过抽象来实现多态与继承,但是实现抽象并不是像C++一样拥有内置功能,需要添加一个abc(Abstract Base Class)的模板来进行抽象操作。可以在定义一个类时在其中加入metaclass=ABCMeta来规定这是一个抽象类,以便于后面的操作。并且可以使用装饰器@abstractmethod来进行抽象函数的定义,而且后续的继承中必须重写此函数。而且抽象类不可以实例化,只可以进行继承。接下来就是我的代码了(比较简单,利用了抽象)

from abc import ABCMeta, abstractmethod

class Employee(object, metaclass=ABCMeta):
    def __init__(self, name):
        Employee._name = name
        """
        :param name: 姓名
        """
        self._name = name
    @property
    def name(self):
        return self._name
    @abstractmethod
    def Salary(self):
        pass

class Manager(Employee):
    def Salary(self):
        return 15000

class Programmer(Employee):
    def __init__(self, name, working_hours=0):
        super().__init__(name)
        self._working_hours = working_hours
    @property
    def working_hours(self):
        return self._working_hours
    @working_hours.setter
    def working_hours(self, working_hours):
        self._working_hours = working_hours if working_hours > 0 else 0
    def Salary(self):
        return 150.0 * self._working_hours

class Salesman(Employee):
    def __init__(self, name, sales=0):
        super().__init__(name)
        self._sales = sales
    @property
    def sales(self):
        return self._sales
    @sales.setter
    def sales(self, sales):
        self._sales = sales if sales > 0 else 0
    def Salary(self):
        return 1200.0 + self._sales * 0.05

def main():
    People = [Manager("二狗"), Programmer("张三"), Salesman("李四"), Manager("王五"), Programmer("打工仔")]
    for i in People:
        if isinstance(i, Programmer):
            i.working_hours = int(input('请输入工作时间'))
        elif isinstance(i, Salesman):
            i.working_hours =int(input('请输入销售额'))
        print("{}的本月公资为{}".format(i.name, i.Salary()))

if __name__ == '__main__':
    main()

代码很简单,为了熟练抽象类的使用,若有不好的地方希望大家可以批评指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值