面向对象

内容概要

  • 面向对象介绍
  • 实现面向对象编程
  • 属性查找

内容详解

  • 面向对象介绍

    '''
    面向过程
        核心是'过程'二字
        过程的终极奥义就是将程序流程化
        过程是'流水线',用来分步骤解决的
    
    面向对象
        核心是'对象'二字
        对象的终极奥义就是将程序'整合'
        对象是'容器',用来盛放数据和功能的
    
        类也是'容器',该容器用来存放同类对象共有的数据和功能
    '''
    
    # 程序 = 数据+功能
    
  • 实现面向对象编程

    # 先定义类
    # 类是对象相似数据与功能的集合体
    # 所以类体中最常见的是变量与函数的定义,但是类体其实是可以包含任意其他代码的
    # 注意:类体代码是在类定义阶段就会立即执行的,会产生类的名称空间
    
    # 再调用类产出对象
    
    # # 一、先定义类
    # class Student:
    #     # 1.变量的定义:
    #     stu_school = 'oldboy'
    #
    #     # 2.功能的定义
    #     def tell_stu_info(stu_obj):
    #         print('学生信息:名字:%s 年龄:%s 性别:%s '%(
    #             stu_obj['stu_name'],
    #             stu_obj['stu_age'],
    #             stu_obj['stu_gender']
    #         ))
    #
    #     def set_info(stu_obj,x,y,z):
    #         stu_obj['stu_name'] = x
    #         stu_obj['stu_age'] = y
    #         stu_obj['stu_gender'] = z
    # print(Student.__dict__)
    # # 属性访问的语法
    # # 1.访问数据属性
    # print(Student.stu_school)  # print(Student.__dict__['stu_school'])
    # # 2.访问函数属性
    # print(Student.set_info)  # print(Student.__dict__['set_info'])
    
    
    # 二、再调用类产生对象
    # stu1_obj = Student()
    # stu2_obj = Student()
    # stu3_obj = Student()
    
    # 为对象定制自己独有的属性
    # 问题1:代码重复
    # 问题2:属性的查找顺序
    # stu1_obj.stu_name = 'ycc'
    # stu1_obj.stu_age = 18
    # stu1_obj.stu_gender = 'male'
    # print(stu1_obj.__dict__)
    #
    # stu2_obj.stu_name = 'xixi'
    # stu2_obj.stu_age = 19
    # stu2_obj.stu_gender = 'female'
    # print(stu2_obj.__dict__)
    #
    #
    # stu3_obj.stu_name = 'jason'
    # stu3_obj.stu_age = 18
    # stu3_obj.stu_gender = 'male'
    # print(stu3_obj.__dict__)
    
    # 解决问题一:
    # def init(obj,stu_name,stu_age,stu_gender):
    #     obj.stu_name = stu_name
    #     obj.stu_age = stu_age
    #     obj.stu_gender = stu_gender
    #
    # init(stu1_obj,'ycc',18,'male')
    # init(stu2_obj,'xixi',19,'female')
    # init(stu3_obj,'jason',20,'male')
    # print(stu1_obj.__dict__)
    # print(stu2_obj.__dict__)
    # print(stu3_obj.__dict__)
    
    # 二、解决问题二:
    # 1、先定义类
    class Student:
        # 1.变量的定义:
        stu_school = 'oldboy'
    
        #           空对象,'ycc',    18,     'male'
        def __init__(obj,stu_name,stu_age,stu_gender):
            obj.stu_name = stu_name  # 空对象.stu_name = 'ycc'
            obj.stu_age = stu_age  # 空对象.stu_age = 18
            obj.stu_gender = stu_gender  # 空对象.stu_gender = 'male'
    
        # 2.功能的定义
        def tell_stu_info(stu_obj):
            print('学生信息:名字:%s 年龄:%s 性别:%s '%(
                stu_obj['stu_name'],
                stu_obj['stu_age'],
                stu_obj['stu_gender']
            ))
    
        def set_info(stu_obj,stu_name,stu_age,stu_gender):
            stu_obj['stu_name'] = stu_name
            stu_obj['stu_age'] = stu_age
            stu_obj['stu_gender'] = stu_gender
    
    
    # 2、再调用类产生对象
    # 调用类的过程又称之为实例化,发生了三件事
    # 1、先产生一个空对象
    # 2、python会自动调用类中的__init__方法将空对象已经调用类时括号内传入的参数一同传给__init__方法
    # 3.返回初始完的对象
    stu1_obj = Student('ycc',18,'male')  # Student.__init(空对象,'ycc',18,'male')
    stu2_obj = Student('xixi',19,'female')
    stu3_obj = Student('jason',20,'male')
    
    print(stu1_obj.__dict__)
    print(stu2_obj.__dict__)
    print(stu3_obj.__dict__)
    
    # 总结__init__方法
    # 1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据
    # 2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,
    # 想要在类调用时就立刻执行的代码都可以放到该方法内
    # 3、__init__方法必须返回None
    
  • 属性查找

    class Student:
        # 1.变量的定义:
        stu_school = 'oldboy'
    
        #           空对象,'ycc',    18,     'male'
        def __init__(self,stu_name,stu_age,stu_gender):
            self.stu_name = stu_name  # 空对象.stu_name = 'ycc'
            self.stu_age = stu_age  # 空对象.stu_age = 18
            self.stu_gender = stu_gender  # 空对象.stu_gender = 'male'
    
        # 2.功能的定义
        def tell_stu_info(self):
            print('学生信息:名字:%s 年龄:%s 性别:%s '%(
                # stu_obj['stu_name'],
                # stu_obj['stu_age'],
                # stu_obj['stu_gender']
                self.stu_name,
                self.stu_age,
                self.stu_gender
            ))
    
        def set_info(self,stu_name,stu_age,stu_gender):
            # stu_obj['stu_name'] = stu_name
            # stu_obj['stu_age'] = stu_age
            # stu_obj['stu_gender'] = stu_gender
            self.stu_name = stu_name
            self.stu_age = stu_age
            self.stu_gender = stu_gender
    
        def choose(self,x):
            print('正在选课')
            self.course = x
    
    stu1_obj = Student('ycc',18,'male')
    stu2_obj = Student('xixi',19,'female')
    stu3_obj = Student('jason',20,'male')
    
    # 类中存放的是对象共有的数据和功能
    # 一、类可以访问:
    # 1.类的数据属性
    # print(Student.stu_school)
    # # 2.类的函数属性
    # print(Student.set_info)
    # print(Student.tell_stu_info)
    
    # 二、但其实类中的东西是给对象用的
    # 1、类的数据属性是共享给所有对象用的,大家访问的地址都一样
    # print(stu1_obj.stu_name)
    # print(stu1_obj.stu_age)
    # print(stu1_obj.stu_gender)
    # print(stu1_obj.stu_school)
    # 查找顺序,先在对象内找,让后去类里找
    
    # print(Student.stu_school)  # oldboy
    # print(stu1_obj.stu_school)  # oldboy
    # print(stu2_obj.stu_school)  # oldboy
    # print(stu3_obj.stu_school)  # oldboy
    #
    # print(id(Student.stu_school))  # 1464557583344
    # print(id(stu1_obj.stu_school))  # 1464557583344
    # print(id(stu2_obj.stu_school))  # 1464557583344
    # print(id(stu3_obj.stu_school))  # 1464557583344
    
    # Student.stu_school = 'OLDBOY'
    # print(Student.stu_school)  # OLDBOY
    # print(stu1_obj.stu_school)  # OLDBOY
    # print(stu2_obj.stu_school)  # OLDBOY
    # print(stu3_obj.stu_school)  # OLDBOY
    
    # stu1_obj.stu_school = 'OLDBOY'
    # print(Student.stu_school)  # oldboy
    # print(stu1_obj.stu_school)  # OLDBOY
    # print(stu2_obj.stu_school)  # oldboy
    # print(stu3_obj.stu_school)  # oldboy
    # 查找顺序先对象后类,这里直接在对象内新建了一个
    
    # # 2.类的函数属性是绑定给对象用的
    # print(Student.tell_stu_info)
    # print(Student.set_info)
    #
    #
    # Student.tell_stu_info(stu1_obj)
    # Student.tell_stu_info(stu2_obj)
    # Student.tell_stu_info(stu3_obj)
    # # 学生信息:名字:ycc 年龄:18 性别:male
    # # 学生信息:名字:xixi 年龄:19 性别:female
    # # 学生信息:名字:jason 年龄:20 性别:male
    #
    # Student.set_info(stu1_obj,'YCC',20,'male')
    # Student.tell_stu_info(stu1_obj)
    # # 学生信息:名字:YCC 年龄:20 性别:male
    
    # 绑定方法的特殊之处在于:谁来调用绑定方法就会将谁当作第一个参数自动传入
    # stu1_obj.tell_stu_info()
    # stu2_obj.tell_stu_info()
    # stu3_obj.tell_stu_info()
    # 学生信息:名字:ycc 年龄:18 性别:male
    # 学生信息:名字:xixi 年龄:19 性别:female
    # 学生信息:名字:jason 年龄:20 性别:male
    
    
    # stu1_obj.choose('python')
    # print(stu1_obj.course)
    # stu2_obj.choose('linux')
    # print(stu2_obj.course)
    # stu3_obj.choose('高级架构师')
    # print(stu3_obj.course)
    
    # 例:
    l1 = ['aa','bb','cc']
    l2 = [11,22,33]
    print(l1.append('dd'))
    # print(l1)
    # print(list.append(l1))  # list.append() takes exactly one argument (0 given)
    
    # list.append(l1,'dd')  # ['aa', 'bb', 'cc', 'dd']
    # list.append(l2,'dd')  # [11, 22, 33, 'dd']
    # print(l1)
    # print(l2)
    
posted @ 2021-07-22 15:25  ccFTD  阅读(36)  评论(0)    收藏  举报