Python 面向过程 面向对象

面向过程:
  像流水线炒菜一样一步一步来,先洗,再切,然后放油、葱姜蒜、主材、各种调料。
  虽然也可以事先把各种材料都准备好(写函数),可最后还是不能先放主材再放油(步骤不能乱)。
  优点是 过程清楚,一步一步来就行,
  缺点是 修改太麻烦,一个小功能可能就要全局修改(数据、参数调用涉及多个函数和流程)

函数与对象:
  函数:某种功能的实现过程
  对象:某些数据和功能的结合体,共同实现某些功能

面向对象:
  对象:具有某种特征(数据)和功能(方法)的集合
  类: 某些具有相似特征和功能的多个对象的合集

  优点:扩展性强,可维护性强
  缺点:复杂度高,难度大

类与对象的生产顺序:
  程序中:先有类,后有对象;先定义类的共有属性和方法,后产生对象的不同属性和方法
  生活中:先有对象,后有类。

定义类:
  class 类名():
    print('This is a class')

  1、类被定义后,会立即执行
  2、产生一个命名空间,生成相应的数据和方法
  3、把类的名称空间,绑定给__dict__ , 类.__dict__可以查看类所拥有的各种属性
  **类和对象,都是一个大字典
  4、类名一般首字母大字

  例:
    class Student():
      shool = 'SH' # 共有属性
      def choose_course(stu_dict,course): # 定义一种功能
        stu_dict['course'] = course
        print('%s成功选择了%s课程'%(stu_dict['course'],course))

给对象定制独有的属性:
  class Student():
    shool = 'SH' # 这个还是共有的
    def __init__(self,name,age,gender,course=None): # 实例化对象时,生成对象属性和方法
      if course == None:
        course = []
      self.name = name
      self.age = age
      self.gender = gender
      self.course = course

实例化一个对象时:
  1、产生一个命名空间
  2、在命名空间中产生一个空对象(大字典,)
  3、调用类的__dict__(或__init__功能)(self,name,age,gender等属性和方法)
  4、把空对象绑定一个对象名,得到一个初始化了的结果。

例:
  stu = Student('ly',18,'男')

属性的查找顺序:
  先找自己的,自己的没有再找共同的,
  比如shool,stu没有自己的shool,那么就会去找Student里面的shool
  就像函数的局部命名空间中没有某个变量的值,就会去上一层函数或者全局中找一样

属性的增、删、改、查:
  类的:类名.属性
    增:
    Student.country = 'China'
    删:
    del Student.country
    改:
    Student.shool = 'BJ'
    查:
    print(Student.shool)

  实例化对象的:对象名.属性
    增:
    stu.country = 'China'
    删:
    del stu.country
    改:
    stu.name = 'Jason'
    查:
    print(stu.name)

方法的调用:
  类中的方法,类和对象都可以调用,推荐使用对象来调用

  类调用:类名.方法(参数)
  对象调用:对象名.方法(参数)

判断对象是不是某个类的实例:

  if isinstance(stu,Student):
    print("I`m a student")
  else:
    print('I`m not a student')

 

上一篇:C语言学习打卡2021.11.01


下一篇:python面向对象02