• 面向过程,对象


    什么是面向过程?

      面向过程:核心是"过程"二字,过程指的就是流程就是做事情的步骤:先做什么,再做什么,后做什么,
           基于该思想编写就是将程序流程化的过程相当于"流水线",用来分步骤解决问题的

      • 优点:复杂的问题简单化进行
      • 缺点:扩展性差
    # 学生的功能
    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
    
    
    # 定义学生信息
    stu_obj = {
        'stu_school': 'oldboy',
        'stu_name': 'egon',
        'stu_age': 18,
        'stu_gender': 'male',
        'tell_stu_info': tell_stu_info,
        'set_info': set_info
    }
    
    stu1_obj = {
        'stu_school': 'oldboy',
        'stu_name': 'lili',
        'stu_age': 19,
        'stu_gender': 'female',
        'tell_stu_info': tell_stu_info,
        'set_info': set_info
    }
    
    # 课程的数据
    course_name = 'python'
    course_period = '6mons'
    course_score = 10
    
    
    # 课程的功能
    def tell_coure_info():
        print('课程信息:名字:%s 周期:%s 学分:%s' % (course_name, course_period, course_score))

    什么是面向对象?  
      面向对象:核心是"对象"二字,对象的终极奥义就是将程序"整合",对象是"容器",用来盛放数据与功能的

      • 优点:扩展性好

    什么是类?
      类:类也是"容器",是用来存放同类对象共有的数据与功能

    定义类:

      类是对象相似数据与功能的集合体所以类体中最常见的是变量与函数的定义,但是类体其实是可以包含任意其他代码的

      注意:类体代码是在类定义阶段就会立即执行,会产生类的名称空间

    调用类产生的对象:

      调用类的过程又称为实例化,发生的三件事:

    1. 产生一个空对象
    2. Python会自动调用类中__init__ 方法将空对象调用类时括号内传入参数给__init__ 方法
    3. 返回初始完的对象
    # 一:先定义类
    class Student:
        # 1、变量的定义
        stu_school = 'oldboy'
    
        # 空对象
        def __init__(obj, x, y, z):
            obj.stu_name = x  
            obj.stu_age = y  
            obj.stu_gender = z  
            
    
        # 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
    
    
    stu1_obj = Student('egon', 18, 'male')
    stu2_obj = Student('lili', 19, 'female')
    stu3_obj = Student('jack', 20, 'male')
    
    print(stu1_obj.__dict__)
    print(stu2_obj.__dict__)
    print(stu3_obj.__dict__)

    总结__init__方法:
    1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据
    2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,想要在
    类调用时就立刻执行的代码都可以放到该方法内
    3、__init__方法必须返回None

    类中存放的是对象共有的数据与功能
    一:类可以访问:
    1、类的数据属性

    print(Student.stu_school)

    2、类的函数属性

    print(Student.tell_stu_info)

    二:但其实类中的东西是给对象用的
    1、类的数据属性是共享给所有对象用的,大家访问的地址都一样

    print(id(stu1_obj.stu_school))
    print(id(stu2_obj.stu_school))
    print(id(stu3_obj.stu_school))

    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)

    绑定方法的特殊之处在于:谁来调用绑定方法就会将谁当做第一个参数自动传入

    print(Student.tell_stu_info)
    print(stu1_obj.tell_stu_info)
    print(stu2_obj.tell_stu_info)
    print(stu3_obj.tell_stu_info)
    
    stu1_obj.tell_stu_info()
    stu2_obj.tell_stu_info()
    stu3_obj.tell_stu_info()
  • 相关阅读:
    给定一个字符串,打印输出有重复的字符和重复的次数,并且按照重复的次数升序输出
    Failed to bind NettyServer on /10.254.4.57:20880, cause: Failed to bind to: /0.0.0.0:20880 配置dubbo遇到的问题
    Feign远程调用,调用方法有返回值,没有返回原方法,Canal监听数据库发生的异常:end of stream when reading header,异常中还有“你的主机中的软件中止了一个已建立的连接”等信息
    idea格式化代码把方法上的文字注释换行的问题
    使用Docker报的错误 docker WARNING: IPv4 forwarding is disabled. Networking will not work
    11月新的开始
    二叉树学习总结
    leetcode刷题日志(200913)637.二叉树的层平均值
    leetcode刷题日志(200909)1512.好数对的数目
    leetcode刷题日志(200908)1480.一维数组动态和
  • 原文地址:https://www.cnblogs.com/zhenghuiwen/p/12653706.html
Copyright © 2020-2023  润新知