面向对象:
面向对象是一种编程语言 它将对象作为程序的基本单元 程序员不再去考虑每个功能具体的实现细节.
优点:专注于处理业务逻辑,大大提高了程序的拓展性,当一个对象发生了修改时,对其他对象没有影响,对象之间相互独立,耦合度变得更低了,提高了程序的灵活性.
缺点:编程的复杂度远高于面向过程,不了解面向对象而立即上手基于它设计程序,很容易出现过度设计的问题.一些拓展性要求低的场景使用面向对象会徒增编程难度.无法像面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,没有运行结束或者遇到异常无法准确的预测到最终结果.
类与对象:
对象:
对象是特征与技能的结合体
在程序中用变量来表示对象的特征,用函数表示对象的技能.将这些变量和函数结合在一起,形成一个整体,就是面向对象的精髓所在!(对象的另一种理解方式:变量的作用是存储数据,函数的作用是处理数据,对象是将数据与处理数据的函数绑定在一起)
类:
类就是类型,类别;是一系列对象中相似特征与技能的结合体,在生活中是一种抽象概念,例如人类,是不具体的.
如某个对象属于人类,可以通过类别,了解这个对象具备的特征和技能,反过来看类就是对象的模板,具备相同的特征与行为.
初始化方法:
在类的实例中,一些属性是必须存在的,就可以使用初始化函数来完成,比如学生类对象的名字属性,它是必须存在的,是用来标识学生的.
执行过程:在实例化类产生对象时会申请新的内存空间用于保存对象数据,接着自动调__init__函数 需要注意的是:__init__方法第一个参数必须是self 该参数标识需要被初始化的对象本身,这样就可以将name属性绑定到对象上,可以将self改为其他任意的名称,但是为了保证易读性通常是self,额外的参数要位于self之后.有了__init__方法,实例化产生对象的时候就不能传入空的参数了,必须传入与方法匹配的参数,但是self不需要传,Python解释器会自己把实例对象传进去.
属性查找顺序:
类中的内容都可以称之为属性,变量称之为数据属性,函数就叫函数属性,类中可以声明变量来表示数据属性,也可以使用点语法在创建对象后为对象增加数据属性,例如(stu = Student(),stu.name="xshushu")
类中的属性是所有对象共享的,创建对象后增加的数据属性是对象独有的,与其他对象无关.查找属性时,先查找对象中的属性,如果没有查找类中的属性,如果类中没有查找父类的属性,一直查到根类(object),如果都没有就抛出异常.
绑定方法与非绑定方法:
方法就是类中的函数,换了一种称呼,绑定方法也就是绑定函数.
为什么要使用绑定方法:在使用面向对象之前,数据与处理数据的函数是独立的没有任何联系,在调用函数时需要手动传入参数,如果要处理的数据很多,参数的传递就是一个非常麻烦的事情.
调用函数时传入参数很多时,编写了很多重复代码并且代码的阅读性很差,后期如果每次处理的数据个数变多了,函数需要修改参数列表,导致以前写的所有代码都需要修改,拓展性非常差,如果传入了错误的数据,会造成函数无法正常工作.
绑定方法处理方法:在调用对象时传入对象,对象中包含了需要的所有数据,减少重复代码,后期数据变化时,修改类对象中的属性,方法中增加相应的处理代码,而方法参数不会发生变化,提高了拓展性,方法与对象进行了绑定,没有对象则无法使用方法,并且在创建对象的初始化方法中,已经确定了各个属性数据是正确的,这样就避免了传入使用错误数据执行函数造成的问题.
绑定方法:
1.类绑定方法:用classmethod装饰器装饰的方法,会自动传入类对象,第一个参数是cls
2.对象绑定方法:没有被任何装饰器装饰的方法,在类中定义的函数默认都是绑定到对象的方法
非绑定方法:
不与类或对象绑定,类和对象都可以调用,但是没有自动传值,就是一个普通函数,但是因为作用域在类中,所以需要类或者对象调用
封装:
封装指的是隐藏对象的属性和实现细节,仅对外公开接口,控制程序中属性的访问权限.
python中的权限分为两种
1.公开 外界可以直接访问和修改
2.私有 外界不能直接访问和修改,在当前类中可以直接修改和访问
为什么需要:保护数据安全,不让外界能直接访问到数据
有什么用:可以对一个属性加以判断,如果满足一定条件才可以访问该数据.封装的属性可以直接在内部使用,而不能被外部直接使用.
怎么用:在属性名前添加两个下划线__将其设置为私有的
未完待续....