面向过程:核心是过程二字,过程指的是解决问题的步骤,类似流水线,机械的思维方式
优点:复杂的问题流程化,进而简单化
缺点:一次只能解决一个问题
应用场景:对扩展性要求较低的软件,如系统内核,脚本程序
面向对象:一切皆对象,对象指的是具有某些属性与行为的结合体,是客观存在,是类的具现化
面向过程的方式:
有条不紊的解决问题
面向对象的方式:
生成对象由对象解决问题
面向对象:
优点:不必考虑实现方式
可扩展性提高
各对象之间耦合度低,不会相互产生影响
可维护性高
缺点:面向对象的复杂度比面向过程高
无法预知执行结果
使用场景:需要较高的扩展性时,直接与用户交互的程序,
面向对象编程的本质:使用不同的对象完成程序
类:类型类别,一个抽象概念,类是根据相似属性与行为的对象抽象
类包含一系列相同特征和技能的对象
对象是类的实例
生活中先有对象,抽象对象得到类
程序中先有类,根据类再创建对象
类的命名方式:大驼峰体,即每个单词的首字母大写
通过类创建对象时,每个对象的内存地址不同,创建对象,计算机会申请一个新的内存空间来存放它的内容
存储属性的位置有两个,类中,对象中
当每个对象的某个特征都相同时放到类中
当特征不同时放到对象中
可以通过__dict__获取一个对象包含的内容
属性的访问顺序:
当对象不存在时,会到类中寻找
如果对象存在这个属性时优先访问对象中的属性
创建一个类,会产生名称空间,存储类中名称和值的绑定关系
创建一个对象时,产生名称空间存储对象中名称与值的绑定关系
类可以作为对象的模板,所有属于同一个类的对象,都具备类中的公共内容
即使类中什么都没有,也存在一些从父类object中继承自带的属性,
类的初始化函数:__init__(self),该函数会在调用类时自动执行,self参数必须有,表示要进行初始化的对象,系统会自动传值
绑定方法:将对象与函数进行绑定
对象本质是一种存放数据的容器,函数就是用于处理数据的代码
默认情况下:类中定义的函数都是绑定方法,共同点是,都会将对象作为第一个参数self
当用对象调用类中的方法时,默认将对象传入方法中
而用类名调用时,需要手动传入对象
绑定方法分为两种,绑定给对象与绑定给类
绑定给类的方法使用一种为classmethod的装饰器,必须有一个参数
对象绑定方法:可以使用对象来调用,也可以使用类名来调用
在对象调用时会自动传入参数为对象本身
类调用时不会自动传参
类的绑定方法:对象与类都可以调用,并且自动传参
如何定义对象绑定方法与类的绑定方法:
调用的区别,当要处理的数据包含在类中时,就应该绑定给类
当要处理的数据包含对象中的属性时就应该绑定给对象
类的绑定方法与对象的绑定方法的相同与不同:
相同点:
都会自动传值
都可以被类和对象调用
不同点:
对象绑定方法在对象调用时,传递的参数为对象本身,而类绑定方法自动传的是类
第一个参数分别为:cls self
为什么要绑定?
传递参数必须手动传递有可能传参顺序发生错误
每次处理数据都需要手动传参
当腰处理的数据非常多,就不能再定义为变量,你可以使用列表来存储要处理的数据
之所以绑定,简化代码提高效率
非绑定方法:
在类中,即不绑定类也不绑定对象的方法
特点:没有自动传参的效果,类和对象都能调用,就是一个普通函数
当没有访问类和对象的数据的需求时,就可以作为一个非绑定方法
使用场景较少