• 面向对象简单 记录


    面向对象
    1引子

    狗大战
    ----多条狗,每个狗有名字,品种,攻击力
    ----可以有多个人
    ----狗可以咬人,人可以打狗

    上帝视角---->>>编程
    2编程范式 就是编程的套路
    * 面向过程
    PV --page visit, UV --user visit
    3面向对象编程
    OOP
    3.1实例化,就是指用模板(class)生成的实体的过程,
    对象--- 实例化生成的实体,就是对象
    self 代表实例本身
    类属性,类变量,公共属性,所有实例属性
    实例属性,实例变量,成员变量,每个实例独享
    3.2对象交互
    3.3类和类之间的关系
    1 依赖关系
    2关联关系
    3组合关系
    4聚合关系
    5继承关系
    4.1 继承
    带括号()例:class Person(Animal):
    1person(子类) 继承 animal(父类)
    2可以自己定义特性
    3可以重构,父类已经有的
    4.2重写父类方法
    继承 super().__init__(name, age, sex)
    self.hobbie = hobbie
    多继承
    多继承,按顺序,从左到右
    class A:经典类
    class B(object):新式类
    python3 C3算法 广度优先,深度优先
    4.3 C3算法
    print (F.mro()) 显示顺序
    4.4三大特征之封装
    self.__lifeval = 100
    私有属性 2个下划线(封装)
    私有方法 2个下划线
    实例名._类名 + 方法名()
    4.5 实例:校园管理系统
    1 定模型 , 多少个类
    1)找出关键独立名词
    总部 分校 学员 老师 员工 课程 班级

    2 定属性
    总部
    名称,地址,电话,网址
    财务账务,员工列表,发工资,开分校,招人
    分校
    pass
    学员
    姓名,年龄,班级,余额
    上学打卡
    转学 ?
    交学费
    老师
    教学

    员工
    姓名,职务,部门,工资
    上班打卡
    课程
    名称,价格,大纲
    班级
    校区
    课程
    学期
    学员列表
    转学。。
    退学
    上课记录
    考试
    3 定关系
    分校--》总部
    学员--》班级
    班级--》课程
    班级--》校区
    老师--》班级
    老师--》员工
    学员--》老师
    员工--》校区
    4 画UML模型图
    统一建模语言
    5 写代码

    5 面向对象的进阶
    5.1 类方法, 静态方法
    类方法,不能访问实例变量,只能访问类变量

    why ?
    因为Self这个参数接受的不是实例本身,而是类本身

    有什么用?
    class Student(object)
    s1 +1
    s2 +1
    s3 +1

    s3.stu_num 3
    s2.stu_num 3

    判断要不要stu_num计数的关键在于有没有生成实例

    静态方法
    @staticmethod
    不能访问实例变量,也不能访问类变量

    静态方法隔断了它跟类或实例的任何方法。。。

    5.2 属性方法property
    把一个方法变成 一个静态的属性(变量)

    查机票
    1. 连接各机场的航班系统
    2. 查询信息
    3. 对返回的信息进行处理,解析,显示给用户

    飞机的 状态,价格
    flight.status = 到达
    5.3 神奇的反射
    可以通过字符串的形式来操作对象的属性
    class Person():
    def__init__(self,name,age)
    self.name = name
    self.age = age
    四种方法
    hasattr
    getattr
    setattr
    delattr

    如何 反射 一个文件下 指定的字符串对应的属性

    __name__ 在当前模块主动执行的情况下(不是被导入执行),等于 __main__
    在被其他模块导入执行的情况下,等于模块名

    5.4 动态加载模块
    字符串形式 映射 为模块
    import importlib
    importlib.import_module("propery") #官方推介

    5.5 类的双下划线方法
    len方法

    >>>str 与 repr
    del 析构方法 (释放内存)

    5.6 new 方法
    __new__ 在 __init__ 前执行

    new 方法实现单例模式
    5.7 call 方法
    s() # 实例名()就执行
    类名() 就执行

    6.1 动态产生一个类
    dog_class=type("Dog", (object,),{"role":"dog","__init__":__init__})

    7.1 异常处理
    isinstance(obj,cls)
    issubclass(sub,super)

    把可能会发生错误,提前在代码里进行捕捉(监测)
    try:
    your code

    except Exception as e: # exception 万能异常
    出错后要执行的代码
    强类型错误
    SyntasError
    Indentationrrrov
    # 无法捕捉

    异常基本语法

    万能异常
    try...else...finally
    主动触发异常
    raise

    自定义异常
    BaseException所有异常的基类
    8.1 assert断言的用途
    做单元测试











  • 相关阅读:
    javascript 事件冒泡
    Java 理论与实践: 正确使用 Volatile 变量
    Concurrency,Java 并发
    POJ2379 ACM Rank Table 模拟题
    HDU1711Number Sequence KMP
    POJ1061 青蛙的约会 扩展GCD
    HDU2523 SORT AGAIN HASH
    HDU2087剪花布条 KMP
    HDU3736 Cyclic Nacklace KMP
    HDU1709The Balance 母函数
  • 原文地址:https://www.cnblogs.com/huahuawang/p/12661357.html
Copyright © 2020-2023  润新知