zoukankan      html  css  js  c++  java
  • 面向对象总结

    什么是面向过程:

    面向过程是一门编程思想,核心是过程二字,过程指的是解决问题的步骤,即先做什么再做什么,基于该编程思想编写程序编写程序,如流水线一般,这是一种机械式的思维方式

    优点是:将复杂的问题流程化,进而简单化

    缺点:牵一发而动全身,可扩展性差

    这里要注意面向过程的编程思想就是函数的使用,这句话是错误的,面向过程思想是一门思想,与任何技术无关

    什么是面向对象:

    面向对象是一门编程思想,核心是对象二字,对象指的是 ‘’‘特征与技能’的结合体,基于该编程思想编写程序,要有一种上帝的思维方式

    优点是:可扩展性高

    缺点:编写程序的复杂程度比面向过程高

    什么是类:

    类指的是类型,类别

    现实社会中:

    先有一个个的对象,经过社会的发展,总结出一个个的类

    在程序中:

    必须先有类,然后通过类来调用类

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

    对象是实际存在的,而类是抽象出来的

    定义类的语法:

    class 关键字: 帮你产生类 类名规范是驼峰式

    对象之间相同的特征(属性)

    对象之间相同的技能 (方法)

    函数的名称空间:

    在调用函数时产生,函数调用结束后销毁

    对象的名称空间:

    在调用类时产生

    类的名称空间:

    在定义阶段,就会产生名称空间,会将类中所有的名字都丢进这个名称空间

    对象的产生:

    调用类时,便会产生对象

    类名+()产生对象,若有对象的属性,则必须要传参()

    什么是实例化,什么是实例?

    调用类产生对象的过程是实例化,对象则是类的实例

    *函数和方法的区别:

    函数要手动传self,方法不用,在类中,如果是一个函数,用类来调用,如果是方法,用对象来调用

    *如果类非要调用方法,则就是当函数来用,则必须遵循函数的传参规则,函数要传几个参数就要传几个

    *类中的所有方法和函数都是绑定给对象使用的,不加装饰器时,类中所有的方法都是对象的绑定方法

    绑定方法都有自动传值的功能,传递是对象或这类的本身

    对象的绑定方法:由对象来调用,谁来调用就将谁作为第一参数传入,若还有其他参数,会一并传入

    类的绑定方法:由类来调用,谁来调用就将谁作为第一参数传入,若还有其他的参数,会一并传入, (@classmethod)

    类的静态方法(非绑定方法):由类或对象来调用,不论谁来调用,都是普通函数,要传几个参数就要传几个参数

    (@staticmethod)

    给对象添加新的属性

    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age
    

    调用类时触发,会将对象作为第一个参数,传给__ init __(),像此类的方法都是有特殊意义的,创建对象时要传除self以外所有的值

    对象中属性的查找顺序:

    1.对象。属性,会先找对象自己的

    2.若对象中没有,会去找类的

    3.若类中的没有,会去找父类的

    什么是派生:

    指的是子类继承父类的属性和方法,并且派生出自己独有的属性和方法,若子类与父类方法重名,先用子类的

    子类继承父类,派生出自己的属性和方法,并且重用父类的属性和方法,有两种方法:

    1.直接引用父类的__ init __ 方法,为其传参,并且添加子类的属性

    父类名.__init__(self,相同的属性)
    

    2.通过super()来指向父类的属性

    super()是一个特殊类,调用super得到一个对象,该对象指向父类的名称空间

    super().__init__(相同的属性)	不写self
    

    使用哪一种都可以,但是不要两种混用

    什么是新式类与经典类:

    新式类:凡是继承了object的类或子孙类都是新式类, 在python3中所有的类都是默认继承新式类的

    经典类:凡是没有继承object的类都是经典类,在python2中才有新式经典式之分

    mro()是内置方法,用于查找新式类的顺序

    多继承的情况下造成了钻石继承:

    新式类:广度优先

    经典类:深度优先

    继承:继承时一种新建类的方式,新建的类是子类或派生类,继承的类是基类或超类,父类必须在子类的上方

    继承的作用:减少代码的冗余

    在python中,一个子类可以继承多个父类

    但是在其他语言中,一个子类只能继承一个父类

    ***对象中添加属性,并不是修改类的属性

    什么是组合?

    组合指的是一个对象中包含另一个或多个对象,优点:减少代码的冗余

    对比组合与继承:

    继承是类与类之间的关系,是一种从属关系,组合是对象与对象之间的关系,是一种什么有什么的关系

    什么是封装?

    封装指的是将一堆属性与方法封装到对象中,好处是:通过对象.的方式可以存放或获取属性或方法,方便属性的获取

    访问限制机制:

    在类内部定义,以__ 开头的属性或方法,外部不可以直接访问,其实是将其变形为 _ 类名 __ 属性/方法

    目的:将一些隐私的数据,隐藏起来,不让外部轻易获取

    什么是property:

    这是一个python的内置装饰器,可以装饰在‘类内部的方法’上,可以将方法的调用,由func+()变为func

    为什么要使用property:

    在某些应用场景下,调用的方法只是为了获取某个值,用名词来调用显得更加的合理

    多态:指的是同一种事物不同的表现形式,目的:多态也称之为多态性,目的是为了在不知道对象具体类型的情况下,统一对象调用方法的规范

    继承父类:

    在python中不会强制限制子类必须要限制父类的规范,所以出现了抽象类

    什么是抽象类:

    作用:让子类必须遵循父类的编写规范

    父类要继承adc模块中, meta class = adc.ABCMeta

    在父类的方法中需要装饰上@abc.adstractmethod

    在python中不推荐使用抽象类

    父类中有几个抽象方法,子类中就得写几个

    什么是鸭子类型:

    不同的对象有相同的属性或技能

    目的:不同的对象,先抽象出相同类型的方法,给他们定制一套统一的规范,所有的类,在定义时都要遵守统一的规范

    多态的三种表现形式:

    继承父类:

    耦合度高,程序的可扩展性差,优点是减少了代码 的冗余

    继承抽象类:

    耦合度极高,程序的可扩展性极低,优点是在不知道对象的具体类型时,可以定制一套统一的规范

    鸭子类型:

    耦合度低,但是程序的可扩展性高,缺点是代码冗余

    在python中推荐

    简述classmethod与staticmethod

    classmethod 与 staticmethod都是 python解释器内置的装饰器

    classmethod:在类内部方法上修饰@classmethod,可以将类内部的方法变为类的绑定方法

    staticmethod:静态方法,在类内部发法上修饰,@staticmethod,可以将类内部的方法变为非绑定方法

    __ class __使用来查看当前对象的类

    __ class __ . __ name __是用来查看当前对象的类名

    uuid: 用来产生随机字符串的模块,会产生世界上独一无二的字符串

    uuid.uuid4()

    isinstance: 判断一个对象是否是另一个类的实例

    issubclass:判断一个类是否是另一个类的子类

    返回True或者False

    什么是反射:

    反射指的是通过字符串对对象的属性或方法进行操作

    hasatrr:通过字符串判断对象的属性或方法是否存在

    getattr:通过字符串来获取对象的属性方法

    setattr:通过字符串来设置对象的属性或方法

    delattr: 通过字符串来删除对象的属性和方法

    凡是在类内部定义,以__ 开头,或者以 __ 结尾的方法,都是类的内置方法,又称之为魔法方法

    __ new __ : 在 __ init __ 前触发,会产生一个新的对象

    __ init __ : 在调用类时, 自动触发。通过产生的对象自动调用 __ init __

    __ getattr__ : 在对象.属性时若属性没有时触发

    __ getattribute __ :在对象.属性时,无论属性有没有都会触发

    同时存在时,只会触发后者

    __ setattr__ :在对象.属性 = 属性值时,触发

    __ call__ : 在调用对象+()时触发

    __ str__ : 在打印对象时触发,必须要有一个字符串的返回值

    __ getitem__ :在对象通过“对象[key]”获取属性时触发

    __ setitem__ :在对象通过“对象[key] = value值”来设置属性时触发

    单例模式:

    指的是在确定‘类中的属性和方法’不变时,需要反复调用该类,产生不同的对象,产生不同的空间,浪费资源

    让所有的类在实例化时,指向同一个内存地址,称之为单例模式。

    优点是:节省内存空间

    第一种:用类的绑定方法来实现
    class MYSQL:
        __instance = None
        
        
        @classmethod
        def singleton(cls):
            if not cls.__instance:
                cls.__instance = cls()
            return cls.__instance
    第二种:重写__ new __ 来实现
    class MYSQL:
        __ instance = None
        
        def __ new __(cls, *args, **kwargs):
            if not cls.__instance:
                cls.__instance = Object.__new__(cls)
            return cls.__instance	
            
    
  • 相关阅读:
    【原】使用Spring自带的JdbcTemplate。
    【原】MyBatis执行DDL:create table,drop table等等
    【转】java获取当前路径的几种方法
    【原】Java程序调用远程Shell脚本
    [转载] 使用Kettle进行数据迁移(ETL)
    appium原理
    python之global关键字的用法
    python之selenium定位(xpath)
    android 稳定性monkey测试
    python之selenium随记(几种等待的用法)
  • 原文地址:https://www.cnblogs.com/godlover/p/11983104.html
Copyright © 2011-2022 走看看