愚公移山日记·3

愚公移山日记·3

自我介绍

河南一所不入流的二本院校,在校大二生,专业是物流管理
Python自习第51天

学习进度

在Github上学习大佬分享的Python - 100天从新手到大师今天学习的是Day09面向对象进阶在今天的学习过程中感觉很吃力,由于是零基础自学,在文章中指出的类,property包装器,静态动态语言的区别,__slots__魔法,在我自己理解的过程中确实有些难度。当然在今天的章节里面有几个很厉害的案例:奥特曼打小怪兽,扑克牌游戏,工资结算系统。

抛砖引玉

咱们今天就把最简单的一道题给整出来吧
案例3:工资结算系统。
说明:某公司有三种类型的员工 分别是部门经理、程序员和销售员,需要设计一个工资结算系统 根据提供的员工信息来计算月薪,部门经理的月薪是每月固定15000元,程序员的月薪按本月工作时间计算 每小时150元,销售员的月薪是1200元的底薪加上销售额5%的提成。
上代码(我已经把代码中出现的函数标注清楚了)

from abc import ABCMeta,abstractmethod
#通过abc模块的ABCMeta元类和abstractmethod包装器来达到抽象类的效果
#如果一个类中存在抽象方法那么这个类就不能够实例化(创建对象)。
class Employee(object,metaclass = ABCMeta):
    def __init__(self,name):
        self._name = name
     @property
    # 访问器 - getter方法
    def name(self):
        return self._name
    @abstractmethod
#在Programmer,Manager和salesman类中的get_salary抽象方法进行了重写并且给出了不同的实现版本
#在我们main函数的调用该方法时标线为多条行为
    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)
#super()函数是用于调用父类的一个方法,语法为 super(type[,object_or_type])  | tpye:类 ,object-or-type:类,一般是指self      
        self._working_hour = working_hour
    @property
# 访问器 - getter方法
    def working_hour(self):
        return self._working_hour
     @working_hour.setter
    def working_hour(self,working_hour):
        self._working_hour = working_hour if working_hour > 0 else 0
    def get_salary(self):
        return 150.0 * self._working_hour
class Salesman(Employee):
    def __init__(self,name,sales = 0):
        super().__init__(name)
#super()函数是用于调用父类的一个方法
        self._sales = sales
    @property
    def sales(self):
        return self._sales
    @sales.setter
#setter(修改器)方法
    def sales(self,sales):
        self._sales = sales if sales > 0 else 0
    def get_salary(self):
        return 1200.0 + self._sales *0.5
def main():
    emps = [Manager('a'),Programmer('k'),Salesman('d')]
    for emp in emps:
        if isinstance(emp,Programmer):
#isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。但是type()不会认为子类是一种父类型,不考虑继承关系
#isinstance()的语法: isinstance(object,classinfo)  object :实例对象,classinfo 可以直接或间接类名,基本类型或则由他们组成的元组           
            emp.working_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()                

学习总结

Python的面对对象的进阶今天也仅仅只是初步的了解,对于类的理解还有待提高,不得不说在自学过程中如果遇到困难,其实很容易被困难打倒的,除非你对这东西有超级浓厚的兴趣,或者说你有超强的自控能力,那么我来说一下我在自学期间遇到困难的解决方法吧,第一肯定不会直接放弃,第二去寻找与之相关但是更将简便的东西去学习,先培养学习这东西的信心,第三等转了一圈再回来也许问题就解决了,如果没有那咱们就实行战略性的转移,进行下一项内容的学习。
好啦今天就到这里,当然我写的博客中有些许不妥当的地方还请各位看官指点。

你可能感兴趣的:(日记)