zoukankan      html  css  js  c++  java
  • day23

    面向对象总复习:

    面向过程编程思想:
    核心是过程,过程指的是做事情的步骤,即先干什么再干什么。
    基于该编程思想编程,就好比一条流水线,一种机械式的思维方式。

    面向对象编程思想:
    核心是对象,对象指的是特征与技能的结合体。
    基于该编程思想编程,就好比创造世界,一种上帝式的思维方式。

    类:
    类指的是一系列对象相同的特征与技能的结合体。

    如何定义类:
    先抽象,抽取对象之间相同的特征与技能。
    再定义类。

    定义类时会发生哪些事情:
    1.会产生一个类的名称空间
    2.会把类内部的所有名字,扔进该名称空间中
    注意: 定义类时,就会执行类内部的代码,若语法不正确,则会报错。

    如何产生对象:
    调用类会产生一个对象,调用类的过程称之为类的实例化,对象称之为类的一个实例。

    init: 调用类时触发该方法。

    调用类时发生的事情:
    1.调用类会产生一个对象的名称空间。
    2.会触发__init__,接着把对象与括号内所有的参数都传给__init__(),对象当作第一个参数。
    3.在__init__内部,可以给对象添加属性。

    对象的名字查找:
    1.先找对象自己的
    2.若对象没有,则去类中查找
    3.类中没有,则会默认继承object类中查找

    对象的绑定方法特殊之处:
    类来调用,类内部的方法只是一个普通函数,函数需要几个参数就传几个。
    对象的绑定方法,由对象来调用,会自动把对象当作第一个参数传给该方法。
    注意: 不同的对象调用对象的绑定方法,会绑定给不同的对象。

    一切皆对象:
    在python中一切皆对象。

    python八大数据类型皆为对象:
        n = 10  # n = int(10)
        list  tuple set dict float bool str
    内置函数: filter
    

    人狗大战:
    人咬狗
    狗又咬人
    人狗互咬。

    继承:
    继承指的是新建类的方式,新建的类指的子类或派生类,
    子类可以继承一个父类,父类又可以称之为基类或超类。

    如何查找继承关系:
    必须遵循“先抽象,再继承”

    抽象:
    抽取相似的部分。

    • 先抽象
      抽取类与类之间相同的特征与技能。

    • 再继承
      确认好子类与父类
      定义父类,父类中写类与类之间相同的特征与技能。
      子类继承父类的属性

    class Father:
    pass

    class Sub(Father):
    pass

    *******继承关系:
    类是对象与对象之间的关系,类是一系列对象相同的特征与技能的结合体。
    继承是类与类之间的关系,子类与父类是一种从属关系。

    派生:
    派生指的子类继承父类的属性,并派生出自己的属性。

    子类可以派生自己的属性,并重用父类的属性
    1.直接调用类,类名.属性的方式重用父类的属性。
    2.super(),super().指向的父类的名称空间,重用父类的属性。
    注意: 子类派生出与父类相同的属性,以子类的为主。

    在继承背景下,对象属性的查找顺序
    1.先从对象的名称空间中查找
    2.去类的名称空间中查找
    3.去父类的名称空间中查找
    4.去object里面查找,若没有则报错。

    新式类与经典类:
    继承object的类,都称之为新式类。
    在python2中,没有继承object的类,都称之为经典类。

    钻石继承(菱形继承):

    新式类:
        广度优先
    
    经典类:
        深度优先
    

    组合:
    组合指的是一个对象的属性,是另一个对象。

    组合的作用,与继承一样,都是解决代码冗余问题。
    
    继承的优点:
        编写的复杂程度没有组合高。
    
    继承的缺点:
        耦合度太高,可扩展性差。
    
    组合的优点:
        可以让类与类之间解耦合, 可扩展性高。
    
    组合的缺点:
        编写的复杂程度高于继承。
    

    封装:
    封装指的是把一堆属性,封装到对象中,对象就好比一个袋子,或一个容器。
    优点:
    方便数据的存取。
    可以通过“对象.属性”的方式获取/取数据与方法。

    封装是面向对象的核心。
    

    访问限制机制:
    在类内部,凡是以__开头的属性,都会被隐藏,实际是变形--> _类名__属性

    好处:
        可以对一些重要的数据进行隐藏,不轻易被直接调用,保证数据的安全。
        比如与金钱、用户信息相关的操作。
    

    property:
    让看起来像动词的方法,变成以名词的方式调用。
    方法名 不需要加括号调用。

    多态:
    同一种事物的多种形态。
    水: 液态水、固态水、气态水

    多态的目的:
        为了统一代码编写的规范。
    
    多态的实现方式:
        继承:
            子类继承父类的特征与技能。
    
        抽象类:
            1.导入一个abc模块
            2.让父类继承一个ABCMeta
            3.给类内部所有的方法加上abc.abstractmethod装饰器
            子类继承抽象类,强制让子类继承父类的方法,缺一不可。
    
        鸭子类型:
            只要长得像鸭子,并且叫声、行为与鸭子一摸一样,那么就是鸭子。
            同一种事物的类,都有相同的功能,该这些类都在内部定义相同名称的方法。
    

    classmethod:
    是一个装饰器,用来装饰在类内部的方法,可以让该方法变成类的绑定方法。
    对象绑定方法:
    由对象来调用,会把对象当作第一个参数传给该方法。

    类的绑定方法:
        由类来调用,会把类当作第一个参数传给该方法。
    

    staticmethod:
    是一个装饰器,用来装饰在类内部的方法,可以让该方法变成非绑定方法。

    非绑定方法特殊之处:
        由谁来调用都是一个普通函数。
    

    面向对象高级:
    - isinstance:
    判断对象是否是类的一个实例。

    - issubclass:
        判断一个类是否是另一个类的子类。
    
    - 反射: 通过字符串操作对象或类的属性。
    
        hasattr: 判断字符串是否是一个对象或类的属性。
        getattr: 通过字符串获取一个对象或类的属性,若没有默认是None。
            getattr('对象或类', '字符串属性名', '自定义的默认值')
    
        setattr: 通过字符串设置一个对象或类的属性。
            setattr('对象或类', '字符串属性名', '属性的值')
    
        delattr: 通过字符串删除一个对象或类的属性。
            delattr('对象或类', '删除的字符串属性名')
    
    - 魔法方法(类的内置方法):
        - __init__: 在调用类时触发,在__new__没有返回一个空对象时不会触发。
    
        - __new__: 在__init__执行前触发,必须要返回一个空对象。
            - object.__new__(cls)  # cls --> 当前类
    
        - __str__: 在打印对象时触发。
    
        - __getattr__: 会在 对象.属性,属性没有时触发。
            在类内部有__getattribute__,就不会执行__getattr__。
        - __getattribute__: 会在 对象.属性,不管属性有没有都会触发。
    
        *******面试题:__getattr__与__getattribute__的区别。
    
        - __setattr__: 会在 对象.属性=属性值 时触发。
    
        - __del__: 会在对象被销毁前触发。
    
        - __call__: 会调用对象时执行。
    
        - __delattr__: 会在对象删除属性时触发。
    

    单例模式:
    单例指的是,调用一个类时实例化得到多个对象时,对象指向同一个对象名称空间。

    - @classmethod
    - __new__
  • 相关阅读:
    线程范围内共享数据
    Swagger+ springfox +Spring mvc
    Nginx代理实现跨域
    实现AJAX跨域访问方式一
    Tomcat 调优及 JVM 参数优化
    REST接口设计规范
    IDEA里面添加lombok插件,编写简略风格Java代码
    intelliJ idea 使用技巧&方法
    IntelliJ IDEA 创建maven项目
    IntelliJ IDEA + Maven创建Java Web项目
  • 原文地址:https://www.cnblogs.com/gfhh/p/11674987.html
Copyright © 2011-2022 走看看