面向对象

面向对象

目录

  • 面向对象的总括
  • 面向对象的编程思想
  • 对象与类的概念
  • 对象与类的创建

面向对象的总括

​ 数据与其调用的功能绑定到一起的操作被称之为"面向对象编程"

面向对象编程的本质是:

​ 将特定的数据与特定的功能绑定到一起,将来只能彼此相互使用

面向对象的编程思想

  • 面向过程编程

    ​ 面向过程编程中的过程就是流程,而其面向过程编程就是在执行一系列的流程

    就是按照指定的步骤依次执行,最终可以得到想要的结果

  • 面向对象编程

    ​ 面向对象编程的核心就是'对象'二字

    其中 对象 就是一个容器,里面将数据和功能绑定在一起

  • 面向过程编程和面向对象编程的区别

    类别 区别
    面向过程编程 给出一个问题的具体的解决方案
    面向对象编程 让创造出一些事物之后不用进行额外的操作

    ​ 两者的编程思想没有优劣之分,仅仅是使用的场景不同

    ​ 很多时候是两者混合使用

    对象与类的概念

​ 在面向对象编程中 类仅仅是用于节省代码 对象才是核心

  • 对象

    ​ 对象就是数据与功能的结合体

    ​ 对象用于记录多个对象不同的数据和功能

  • ​ 类就是多个对象相同的数据和功能的结合体

    ​ 类主要用于记录多个对象相同的数据和功能

对象与类的创建

  • 对象与类的场景下的情况

    场景 先后顺序
    现实生活中 应该先有一个个的个体(对象)再有一个个的群体(类)
    编程世界中 必须是现有类才能产生对象
  • 面向对象的创建类的语法

    class People:
        # 学生对象公共的数据
        # 学生对象公共的方法
        
    1.class是定义类的关键字
    2.People是类的名字
    	类名的命名跟变量名一致 并且推荐首字母大写(为了更好的区分)
    3.类体代码
    	公共的数据\公共的方法
    ps:类体代码在类定义阶段就会执行!!!
    
  • 面向对象中的查看名称空间的方法

    1. 类名.__ dict__ 使用该方法查看名称空间 可以看成是一个字典
      当需要获取具体值的时候,可以通过:
      类名.__ dict__ ['func_name'] 使用字典的取值方式获取 func_name 所对应的v值
      类名.__ dict__ . get('func_name') 使用字典的取值方式获取 func_name 所对应的v值
    class Student:
        # 学生对象公共的数据
        school = '清华大学'
    
        # 学生对象公共的方法
        def choice_course(self):
            print('正在选课')
    print(Student.__dict__) # 获取字典
    print(Student.__dict__['school'])  # 清华大学
    print(Student.__dict__.get('school')) # 清华大学
    
    1. 在面向对象编程中 想要获取名称空间中的名字 可以采用句点符

      类名.func_name 使用该方法可直接取出字典中func_name所对应的v值

      class Student:
          # 学生对象公共的数据
          school = '清华大学'
      
          # 学生对象公共的方法
          def choice_course(self):
              print('正在选课')
       
      print(Student.school)
      print(Student.choice_course) 
          
      '''类实例化产生对象>>>: 类名加括号'''
      
      stu1 = Student()   # 产生对象
      print(stu1.school)
      
      Student.school = '北京大学'  # 修改school键对应的值
      print(stu1.school)
      

      我们习惯将类或者对象句点符后面的东西称为属性名或者方法名

对象的独有数据的流程分析

  • 直接利用 __ dict__ 的方法添加键值对

    obj1 = Student()
    obj1.__dict__['name'] = 'jason'  # 等价于 obj1.name = 'jason'
    obj1.__dict__['age'] = 18  # 等价于 obj1.age = 18
    obj1.__dict__['gender'] = 'male'  # 等价于 obj1.gender = 'male'
    
    obj2 = Student()
    obj2.__dict__['name'] = 'kevin'
    obj2.__dict__['age'] = 28
    obj2.__dict__['gender'] = 'female'
    
    
  • 将添加独有数据的代码封装成函数

def init(obj,name,age,gender):
    obj.__dict__['name'] = name
    obj.__dict__['age'] = age
    obj.__dict__['gender'] = gender
stu1 = Student()
stu2 = Student()
init(stu1,'jason',18,'male')
init(stu2, 'kevin',28,'female')
  • init函数是专用给学生对象创建独有的数据 其他对象不能调用>>>:面向对象思想 将数据和功能整合到一起
    将函数封装到学生类中 这样只有学生类产生的对象才有资格访问

    class Student:
        """
        1.先产生一个空对象
        2.自动调用类里面的__init__方法 将产生的空对象当成第一个参数传入
        3.将产生的对象返回出去
        """
        def __init__(self, name, age, gender):
            self.name = name  # self.__dict__['name'] = name
            self.age = age  # self.__dict__['age'] = age
            self.gender = gender  # self.__dict__['gender'] = gender
            # 左右两边的名字虽然一样 但是意思不一样 左边的其实是字典的键 右边的其实是实参
    
        # 学生对象公共的数据
        school = '清华大学'
    
        # 学生对象公共的方法
        def choice_course(self):
            print('正在选课')
            
        stu1 = Student('jason', 180, 'male')
        stu2 = Student('快男', 28, 'female')
    
posted @ 2022-07-26 16:32  Nirvana*  阅读(31)  评论(0)    收藏  举报