一、三大编程范式
编程范式即编程的方法论,标识一种编程风格
三大编程范式:
1.面向过程编程
2.函数式编程
3.面向对象编程
二、编程进化论
1.编程最开始就是无组织无结构,从简单控制流中按步写指令
2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定义了一个函数),便实现了代码重用,且代码由无结构走向了结构化,创建程序的过程变得更具逻辑性
3.我们定义函数都是独立于函数外定义变量,然后作为参数传递给函数,这意味着:数据与动作是分离的
4.如果我们把数据和动作内嵌到一个结构(函数或类)里面,那么我们就有了一个‘对象系统’(对象就是数据与函数整合到一起的产物)。
三、面向对象设计与面向对象编程
def定义函数是面向对象
class定义类是面向对象
1、面向对象设计
面向对象设计(Object oriented design):将一类具体事物的数据和动作整合到一起,即面向对象设计
示例1:
什么是类?
类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念。
什么是对象?
对象:就是基于类而创建的一个具体的事物(指具体存在的),也是特征和动作整合到一起。
示例2:
学校类:
特征:name,addr,type
动作:考试,招生,开除学生
2、面向对象编程
面向对象编程(object-oriented programming):用定义类+实例/对象的方式去实现面向对象的设计
小结:
在Python中,类和 OOP 都不是日常编程所必需的。尽管它从一开始设计就是面向对象的,并且结构上支持 OOP,但 Python 没有限定或要求你在你的应用中写 OOP 的代码。
用面向对象语言写程序和一个程序的设计是面向对象的,两者就是两码事。
四、类和对象
1.什么叫类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),用它来生产真实的物体(实例)。
(铅笔是对象,人是对象,房子是对象,狗是对象,alex是对象,配齐是对象,元昊是对象)
3.类与对象的关系:对象都是由类产生的,上帝造人,上帝首先有一个造人的模板,这个模板即人的类,然后上帝根据类的定义来生产一个个的人
4.什么叫实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫做一个实例(实例=对象)
五、类的相关知识
1、初识类
在python中声明函数与声明类很相似。
声明函数
声明类
经典类与新式类
示例:
2、属性
类是用来描述一类事物,类的对象指的是这一类事物中的一个个体
是事物就要有属性,属性分为
1:数据属性:就是变量
2:函数属性:就是函数,在面向对象里通常称为方法
注意:类和对象均用点来访问自己的属性
类的属性
理论:数据属性即变量,类的定义与函数又极其类似,其实可以用函数的作用域来理解类的属性调用。
类的数据属性
类的函数属性(又称为方法)
查看类属性
我们定义的类的属性到底存到哪里了?有两种方式查看
dir(类名):查出的是一个名字列表
类名。__dict__:查出的是一个字典,key为属性名,value为属性值
执行结果:
特殊的类属性
六、对象相关知识
对象是由类实例化而来,类实例化的结果称为一个实例或者称作一个对象
1.1、实例化
什么是实例化?
由类生产对象的过程就叫实例化
1.2、构造函数
类是数据属性和函数属性的结合,描述的是一类事物
这类事物的一个具体表现就是一个实例/对象,比方说中国人是一个类,而你就是这个类的一个实例
你除了有中国人这个数据属性外,还应该有名字,年龄,性别等数据属性
如何为实例定制数据属性,可以使用类的一个内置方法__init__()该方法,在类()实例化是会自动执行
注意:在说实例化的时候说过,执行类()会自动返回一值,这个值就是实例,而类()会自动执行__init__,所以一定不要在该函数内定义返回值,会冲突。
1.3、实例属性
理论:
1.实例只有数据属性(实例的函数属性严格来说是类的函数属性)
2.del 实例/对象,只是回收了实例的数据属性,函数属性是属于类的,是不会回收。
实例化的过程实际就是执行__init__的过程,这个函数内部只是为实例本身即self设定了一堆数据(变量),所以实例只有数据属性。
那么我们想访问实例的函数属性(其实是类的函数属性),如何实现
改进版本
3、实例属性和查看实例属性的方法如下:
同样是dir和内置__dict__两种方式
原理图
示例:
执行结果:
1.4、特殊实例属性
__class__
__dict__
警告:类和对象虽然调用__dict__返回的是一个字典结构,但是千万不要直接修改该字典,会导致你的oop不稳定。
1.5、类属性与对象(实例)属性
1、类属性的增、删、改、查
执行结果:
2、实例属性的增、删、改、查
执行结果:
1.其实你会发现,实例化就是 类名(),然后返回的结果是一个对象,加上括号是不是跟函数运行很像,函数运行完了有返回值,是不是很像,没错,就是一样的。
2.函数又作用域的概念,其实类也有作用域的概念,二者一样
3.你可以把class当做最外层的函数,是一个作用域
4.实例化会自动触发init函数的运行,最后返回一个值即实例,我们要找的实例属性就存放在init函数的局部作用域里
5.类有类的属性字典,就是类的作用域,实例有实例的属性字典,即实例的作用域
6.综上,一个点代表一层作用域,obj.x先从自己的作用域找,自己找不到去外层的类的字典中找,都找不到,就会报错
7.在类中没有使用点的调用,代表调用全局变量。
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h61578.shtml