面向对象总结

什么是面向过程:

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

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

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

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

什么是面向对象:

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

优点是:可扩展性高

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

什么是类:

类指的是类型,类别

现实社会中:

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

在程序中:

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

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

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

定义类的语法:

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	
        
posted @ 2019-12-04 15:23  godlover  阅读(106)  评论(0编辑  收藏  举报