python学习核心Day14(P149~~159)

b站达内python课学习笔记

P149~150 Python核心-1.1&1.2 课程回顾01&02

一、Day13复习

"""
    复习
        面向对象:考虑问题从对象的角度出发.
        抽象:从多个事物中,舍弃个别的/非本质的特征(不重要),
             抽出共性的本质(重要的)过程。
        三大特征:
            封装:将每个变化点单独分解到不同的类中。
                例如:老张开车去东北
                做法:定义人类,定义车类。

            继承:重用现有类的功能和概念,并在此基础上进行扩展。
                   统一概念
                例如:图形管理器,统计圆形/矩形.....面积。
                做法:用图形类代表/约束,圆形/矩形..具有计算面积的方法.

            多态:调用父"抽象的"方法,执行子类"具体的"方法.
                重写:覆盖父类那个比较抽象的方法。
                例如:图形管理器调用图形的计算面积方法
                     具体图形必须重写图形的计算面积方法。
                继承是共性(计算面积),多态个性(长*宽 / pi *r**2)。

        设计原则
            开闭原则:允许增加新功能,不允许修改客户端代码.
            单一职责:一个类有且只有一个改变的原因.
            依赖倒置:调用抽象(父),不要调用具体(子);
                    抽象不要依赖具体.
            组合复用:如果仅仅是代码的复用,优先使用组合.

        类与类关系
            泛化[继承](做成爸爸)
            关联(做成成员变量)
            依赖(做成方法参数)
"""

P151 Python核心-1.3 课后作业解析

"""
    10:50 上课
    定义员工管理器
        1.管理所有员工
        2. 计算所有员工工资

    员工:
        程序员:底薪 + 项目分红
        销售:底薪 + 销售额 * 0.05
        软件测试...
        ...

    要求:增加新岗位,员工管理器不变.
"""


class EmployeeManager:
    def __init__(self):
        self.__employees = []

    def add_employee(self, emp):
        self.__employees.append(emp)

    def get_total_saraly(self):
        total_saraly = 0
        for item in self.__employees:
            # 调用是抽象的员工类
            # 执行是具体的员工(程序员/销售..)
            total_saraly += item.calculate_salary()
        return total_saraly


class Employee:
    def __init__(self, base_salary):
        self.base_salary = base_salary

    def calculate_salary(self):
        return self.base_salary

# ---------------------------------------
class Programmer(Employee):
    def __init__(self, base_salary, bonus):
        super().__init__(base_salary)
        self.bonus = bonus

    def calculate_salary(self):
        # return self.base_salary + self.bonus
        # 扩展重写
        return super().calculate_salary()+ self.bonus


class Salesmen(Employee):
    def __init__(self, base_salary, sale_value):
        super().__init__(base_salary)
        self.sale_value = sale_value

    def calculate_salary(self):
        return self.base_salary + self.sale_value * 0.05


# 测试
manager = EmployeeManager()
manager.add_employee(Programmer(200000,500))
manager.add_employee(Salesmen(2000,1000))
print(manager.get_total_saraly())

P152 Python核心-1.4 内置可重写函数

一、内置可重写函数

Python中,以双下划线开头、双下划线结尾的是系统定义的成员。我们可以在自定义类中进行重写,从而改变其行为。如:
__str__函数:将对象转换为字符串(对人友好的)
__repr__函数:将对象转换为字符串(解释器可识别的)

其实直接print列表的引用,会打印出列表,是因为列表的类里的__str__函数被复写成了那个形式

二、示例代码

补充知识点,利用eval和repr可以克隆对象,如 s02 = eval(repr(s01))

class StudentModel:
    def __init__(self, name="", age=0, score=0, id=0):
        self.name = name
        self.age = age
        self.score = score
        self.id = id

    # 对象 --> 字符串 (随意格式)
    def __str__(self):
        return "我叫%s,编号是%d,年龄是%d,成绩是:%d"%(self.name,self.id,self.age,self.score)

    # 对象 --> 字符串(解释器可识别,有格式)
    def __repr__(self):
        return "StudentModel('%s',%d,%d,%d)"%(self.name,self.age,self.score,self.id)


s01 = StudentModel("无忌",27,100,101)
str01 = str(s01)
print(str01)
print(s01)

str02 =repr(s01)
print(str02)

# 根据字符串执行python代码
re = eval("1+2*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值