面向过程编程

就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

优点:性能高,流程清晰

缺点:不易维护,不易复用,不易扩展,使用于小型项目

用面向过程的方法写出来的程序就像是一份蛋炒饭,先炒蛋,混合些洋葱粒,胡萝卜丝,豌豆,翻炒片刻,再把饭加入锅里,加各种调料,酱油味精什么的,蛋与饭交融在一起,充分混合,加上各种香料,香味已经渗透到饭里面。吃起来让人欲罢不能。但是,对于我这样不喜欢吃蛋的人来说就不是那么友好了。

面向对象编程:对象与对象之间的交互

面向(对着)对象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