zoukankan      html  css  js  c++  java
  • 面向对象编程

    面向过程 与 面向对象

    面向过程:

    • 核心是‘过程’二字
    • 过程的终极奥义:将程序流程化
    • 过程是‘流水线’,用来分步骤解决问题的

    面向对象:

    • 核心是‘对象’二字
    • 对象的终极奥义:将程序‘整合’
    • 对象是‘容器’,用来盛放 数据 与 功能的

    程序 = 数据 + 功能

      

    面向对象

    什么是对象

    面相对象是一种编程思想,而对象的核心就是把程序‘整合’

    定义:对象是一种‘容器’,用来盛放数据(变量)与功能(函数)

    举例

    代码总体都是由数据与功能组成的,可以简单理解为变量与函数
    
    程序=数据+功能
    
    学生的容器=学生的数据+学生的功能
    课程的容器=课程的数据+课程的功能
    
    以化妆品为例:
    
    粉底、眼影 >原材料=>数据
    眉笔、小刷子 ====>工具 =====>功能
    

      

    类  于对象

    定义:类也是一种容器,用来存放同类别对象共有的数据与功能

    实现面向对象编程

    先定义类

    • 类是对象相似功能的集合体,所以类体中可以存放任意代码
    • 类在定义时就会执行类体代码
    • 类是为了存放对象的相似集合,并不是用于直接使用的
    # 类的命名规范:通常以驼峰体
    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
    

      

    调用dict方法

    # 先查看类的内置方法__dict__内存放的是什么
    print(Student.__dict__)
    
    {'__module__': '__main__', 'stu_school': 'oldboy', 'tell_stu_info': 
     <function Student.tell_stu_info at 0x000002ABCBEC1E18>, 'set_info': 
     <function Student.set_info at 0x000002ABCBEC1EA0>,
     '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
    
    # 可以看到类的dict方法得到的是一个类的字典,其中有一部分是变量名和函数名和他们对应的内存地址
    #所以我们可以通过字典取key的方法去查找类的属性
    
    print(Student.__dict__['stu_school'])
    >>>oldboy
    
    print(Studeng.__dict__['tell_stu_info'])
    >>><function Student.tell_stu_info at 0x000001FF7E511E18>

    注:上面的方法通常情况不会使用,有一种更简单的方法

    print(Student.stu_school)
    >>>oldboy
    print(Student.set_info)
    >>><function Student.tell_stu_info at 0x000001FF7E511E18>
    

      

    调用类产生对象

    stu1_obj = Student()
    stu2_obj = Student()
    stu3_obj = Student()
    
    # stu1_obj.__dict__['stu_name'] = 'eogn'
    # stu1_obj.__dict__['stu_age'] = 16
    # stu1_obj.__dict__['stu_gender'] = 'male'
    # print(stu1_obj.__dict__)        # {'stu_name': 'eogn', 'stu_age': 16, 'stu_gender': 'male'}
    
    stu1_obj.stu_name = 'eogn'
    stu1_obj.stu_age = 16
    stu1_obj.stu_gender = 'male'
    print(stu1_obj.__dict__)        # {'stu_name': 'eogn', 'stu_age': 16, 'stu_gender': 'male'}
    

      

    这里我们通过调用对象在类中的共有方法可以发现,在此处他不再是一个函数而是一个绑定方法 。

    准确的来说,在新建一个对象时,他会具备类的中所有属性,但是这个具备是有区别的 类的名称空间类似于全局名称空间 对象的名称空间类似函数的局部名称空间 我们可以在局部找全局,但是不能在局部修改全局,可以在全局修改局部

    对象的自定义属性

    class Student:
        # 1、变量的定义
        stu_school='oldboy'
        # 对象的私有属性
        def __init__(self, x, y, z):
            self.name = x  # 空对象.stu_name='egon'
            self.age = y  # 空对象.stu_age=18
            self.gender = z  # 空对象.stu_gender='male'
        # 2、功能的定义
        def tell_stu_info(self):
            print('学生信息:名字:%s 年龄:%s 性别:%s' %(
                self.name,
                self.age,
                self.gender
            ))
        def set_info(self,x,y,z):
            self.name=x
            self.age=y
            self.gender=z
    

      

    调用类产生对象会发生三件事

    • 生一个空对象
    • python会自动调用类中的--init--方法,然后将空对象已经调用的类时括号的参数一同传入
    • 返回执行完类中init方法的对象
    stu1_obj=Student('egon',18,'male') 
    

    总结

    会在调用类的时候自动触发执行,用来为对象初始化自己独有的数据
    --init--内应该存放对象初始化属性的功能,但是可以存放任意其他代码,想要在类调用时就理科执行的代码都可以放在这个方法内
    --init--方法必须返回None
    

      

    类的函数和对象的绑定方法

    我们要调用类中定义的函数必须遵循该函数的使用规范

    stu1_obj = Student('zxc',20,'male')
    Student.tell_stu_info(stu1_obj)#该函数需要传入一个参数
    >>>学生信息:名字:zxc 年龄:20 性别:male
    

      

    对象的绑定方法:对象在创建的时候,类中的函数会把这个函数绑定给对象。

    使用:使用方法和函数没有区别,唯一的区别是,我绑定的这个实例化对象会作为这个函数的第一个参数传入

    stu1_obj = Student('zxc',20,'male')
    Student.tell_stu_info(stu1_obj)
    >>>学生信息:名字:zxc 年龄:20 性别:male
    

      

    python中万物皆对象

  • 相关阅读:
    Q15格式表示负小数
    音频算法处理笔试面试题
    有符号和无符号之间的转化
    PE5 Smallest multiple
    PE3 Largest prime factor(最大素数因子)
    PE2 Even Fibonacci numbers(最大菲波那列偶数)
    PE 4 Largest palindrome product(最大回文)
    PE1 Multiples of 3 and 5
    Codevs高精度入门(减法、加法和乘法)解题报告
    计算机网络学习笔记(二) 计算机网络结构
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12655999.html
Copyright © 2011-2022 走看看