面向过程编程
就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
优点:性能高,流程清晰
缺点:不易维护,不易复用,不易扩展,使用于小型项目
用面向过程的方法写出来的程序就像是一份蛋炒饭,先炒蛋,混合些洋葱粒,胡萝卜丝,豌豆,翻炒片刻,再把饭加入锅里,加各种调料,酱油味精什么的,蛋与饭交融在一起,充分混合,加上各种香料,香味已经渗透到饭里面。吃起来让人欲罢不能。但是,对于我这样不喜欢吃蛋的人来说就不是那么友好了。
面向对象编程:对象与对象之间的交互
面向(对着)对象bject(一辆自行车就是一个对象)编程(码代码)
优点:易维护,易复用,易扩展,系统更加灵活
缺点:异常复杂
三大特点:封装,继承,多态
用面向对象写出来的程序就像是一份盖浇饭,可以根据不同的人的喜好来烹饪,有的喜欢番茄炒蛋盖浇饭,有的喜欢青椒肉丝盖浇饭,都可以,直接把菜往饭上一堆就可以了,饭菜是相互独立的,由于菜汁是覆盖在饭的上面的,吃的时候还需搅拌搅拌,让菜汁的香味慢慢融合到饭里,没有蛋炒饭来的那么干脆。
所以蛋炒饭与盖浇饭谁也代替不了谁,它们是为不同的吃货准备的
类和对象
类:(模板/类别)划分了对象,具有相同的属性和方法的对象属于同一类(自己控制)
对象:一系列特征(属性)和技能(方法的结合体)
定义类语法
class 类名(驼峰体):
school = 'oldboy' #定义变量(给类添加属性)
def choose_course(self):#定义在类内部的函数一般称为方法(给类添加技能)
pass
class Student:
"""注释:学生类"""
school = 'oldboy' #定义变量(给类添加属性)
def choose_course(self):#定义在类内部的函数一般称为方法(给类增加技能)
# stu_dict = Student.__dict__ # 获取类的所有属性和方法
# print(stu_dict)
# print(stu_dict['school']) # 获取学校
# stu_dict['choose_course'](123)
# print(Student.__doc__)
函数定义阶段:检测语法,不执行代码
类定义阶段:执行代码
- 由类创建一个具体的对象,称为实例化一个对象
print('stu1:', stu1)
print(stu1.school)
print(id(stu1.school))
stu1.choose_course() # 对象使用类中的方法时,不需要加参数,因为实例化对象调用该方法时,python会自动将该实例化对象传给self
定制对象独有的特征
对象本质类似于类,也是一个名称空间,但是对象的名称空间存放对象独有的名字,而类中存放的是对象们共有的名字。因此我们可以直接为对象单独定制名字。
def init(obj, name, height, weight):
obj.name = name
obj.weight = weight
obj.height = height
stu1 = Student()
init(stu1, 'yutong', '170', '140') #
init是你用来给对象添加独有特征的函数
print(stu1.name)
print(stu1.weight)
print(stu1.height)
类与数据类型
python中一切皆对象,一切皆数据类型
作为对象
1. 引用 x = 10 ; y = x
2. 作为容器类元素 lis = [x,func,Student]
3. 作为函数参数 def func(x, func, Student)
4. 作为函数返回值 return x,func,Student