• Python 抽象类


    什么是抽象类

        与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

    为什么要有抽象类

        如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类是从一堆中抽取相同的内容而来的,内容包括数据属性和函数属性。

      比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子。。。。。。你永远无法吃到一个叫做水果的东西。

        从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽象而来的。

      从实现角度来看,抽象类与普通类的不同之处在于:抽象类中有抽象方法,该类不能被实例化,只能被继承,且子类必须实现抽象方法。这一点与接口有点类似,但其实是不同的

    在python中实现抽象类

    """
    某公司有三种类型的员工 分别是部门经理、程序员和销售员
    需要设计一个工资结算系统 根据提供的员工信息来计算月薪
    部门经理的月薪是每月固定15000元
    程序员的月薪按本月工作时间计算 每小时150元
    销售员的月薪是1200元的底薪加上销售额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
        @abstractmethod
        def get_salary(self):
            pass
    class manger(employee):
        def get_salary(self):
            return 15000.0
    class programer(employee):
        def __init__(self,name,work_hour=0):
            super().__init__(name)
            self._work_hour=work_hour
        def get_salary(self):
            return 150.0*self._work_hour
        @property
        def work_hour(self):
            return self._work_hour
        @work_hour.setter
        def work_hour(self,work_hour):
            self._work_hour=work_hour if work_hour>0 else 0
    class salesman(employee):
        def __init__(self,name,sales=0):
            super().__init__(name)
            self._sales=sales
        def get_salary(self):
            return 1200.0+self._sales*0.05
        @property
        def sales(self):
            return self._sales
        @sales.setter
        def sales(self,sales):
            self._sales=sales if sales >0 else 0
    def main():
        emps=[manger('wbb'),programer('bb'),salesman('lj')]
        for emp in emps:
            if isinstance(emp,programer):
                emp.work_hour=int(input("请输入%s本月工作时长:"%emp.name))
            elif isinstance(emp,salesman):
                emp.sales=float(input("请输入%s本月的销售量:"%emp.name))
            print("%s本月的工资为:¥%s元"%(emp.name,emp.get_salary()))
    if __name__=='__main__':
        main()
  • 相关阅读:
    SQLyog使用中的点滴总结
    Maven的GroupID和ArtifactID的含义
    Android View 深度分析requestLayout、invalidate与postInvalidate
    15 个 Android 通用流行框架大全
    Android Studio中获取查看签名SHA1证书指纹数据或MD5的方法
    android:descendantFocusability用法简析
    Android应用层View绘制流程与源码分析
    android.graphic.Path
    Android Scroller简单用法
    Android 2D Graphics学习 Region和Canvas裁剪
  • 原文地址:https://www.cnblogs.com/andrew3/p/13157240.html
Copyright © 2020-2023  润新知