在介绍面向对象之前先说一说编程范式,主要有面向过程和面向对象两大类,下面简单介绍以下这二者之间的优缺点
面向过程编程
面向过程编程其核心在过程二字,过程指的是解决问题的步骤,即先干什么,在干什么。
基于该思想编程写程序就好比在设计一条流水线,是一种机械式的思维方式。
其优点是:复杂问题流程化,进而简单化
缺点是: 扩展性差,若要修改某一功能,有可能牵一发而动全身
面向对象编程
核心是对象二字,对象我们可以简单描述为特征与技能的结合体
基于该思想编写程序就好比再创造一个世界,世界万物都是对象,你就是创造这个世界的角色
如果把对象比喻为特征与技能的结合体,那么类就是一系列对象相似的特征与技能的结合体
站在不同的角度总结出来的类是截然不同的
在现实世界中一定是现有某一个具体存在的对象,才能将其归为某一类,但是在程序中必须先定义类,后调用类来产生对象
现实世界中总结对象-->抽取相似之处-->得到现实世界中的类
定义程序中的类-->调用类,产生程序中的对象
我们这里暂且不讨论现实中怎么将一个对象归类,直接看程序中的类是如何产生对象
1 先定义类:
class Student:
school = 'University of Technology'
def choose_couse(self):
print('there is choosing course')
我们看看以上四行代码都发生了什么,首先我们定义了一个名为Student的类,在类的定义阶段会立刻执行类体代码,产生类的名称空间,将类体代码执行过程中产生的名字都放入名称空间中
print(Student.__dict__)
类的本质就是一个名称空间/容器,从类的名称空间中增/删/改/查某一名字
Python为我们提供专门访问属性(名称空间的名字)的语法,点后的都是属性
Student.school #Student.__dict__['school'] #查
Student.x = 1 #Student.__dict__['x'] = 1 #增
Student.school = 'university of technology' #Student.__dict__['school'] = 'university of technology' #改
del Student.x #del Student.__dict__['x'] #删
类中定义的函数是类的函数属性,类可以使用,但是用 的就是一个普通函数,意味着需要完全遵循函数的参数原则,该传几个值就传几个
2 后调用类产生对象,调用类的过程称之为实例化,实例化的结果称之为类的一个实例或者对象
stu1 = Student()
stu2 = Student()
print(stu1)
print(stu2)
print(Student.school)
Student.school = 'University of Technology'
print(stu1.school)