zoukankan      html  css  js  c++  java
  • # 什么是类(class)?
    # 类是就是对象,也就是数据与功能的集合体
    # 所以类体中最常见的是变量与函数的定义,但是类体其实是可以包含任意其他代码的
    # 注意:类体代码是在类定义阶段就会立即执行,会产生类的名称空间



    # 类体最常见的是变量的定义和函数的定义,但其实类体可以包含任意Python代码,类体的代码在类定义阶段就会执行,
    # 因而会产生新的名称空间用来存放类中定义的名字,可以打印Student.__dict__来查看类这个容器内盛放的东西

    1、定义一个类:
    class Student:
    # 1、变量的定义
    stu_school='oldboy'

    # 空对象,'egon',18,'male'
    def __init__(obj,x,y,z):
    obj.stu_name=x # 空对象.stu_name='egon'
    obj.stu_age=y # 空对象.stu_age=18
    obj.stu_gender=z # 空对象.stu_gender='male'
    # return None

    # 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('========>')
    
    
    # 属性访问的语法
    # 1、访问数据属性
    # print(Student.stu_school) # Student.__dict__['stu_school']
    # 2、访问函数属性
    # print(Student.set_info) # Student.__dict__['set_info']

    属性查找顺序与绑定方法

       对象的名称空间里只存放着对象独有的属性,而对象们相似的属性是存放于类中的。

    对象在访问属性时,会优先从对象本身的__dict__中查找,未找到,则去类的__dict__中查找


    2、再调用类产生对象
    调用类的过程称为将类实例化,拿到的返回值就是程序中的对象,或称为一个实例,发生了三件事:
    # 1、先产生一个空对象
    # 2、python会自动调用类中的__init__方法然将空对象以及调用类时括号内传入的参数一同传给__init__方法
    # 3、返回初始完的对象
    stu1_obj=Student('egon',18,'male') # Student.__init__(空对象,'egon',18,'male')
    # stu2_obj=Student('lili',19,'female')
    # stu3_obj=Student('jack',20,'male')

    1.类中定义的变量是类的数据属性,是共享给所有对象用的,指向相同的内存地址
    2.类中定义的函数是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数
    ps: 但其实类中定义的函数主要是给对象使用的,而且是绑定给对象的,虽然所有对象指向的都是相同的功能,
    但是绑定到不同的对象就是不同的绑定方法,内存地址各不相同。

    绑定到对象的方法特殊之处在于,绑定给谁就应该由谁来调用,谁来调用,就会将’谁’本身当做第一个参数自动传入(方法__init__也是一样的道理)
    # 总结__init__方法
    # 1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据
    # 2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,想要在
    # 类调用时就立刻执行的代码都可以放到该方法内
    # 3、__init__方法必须返回None

    总结:

            在上述介绍类与对象的使用过程中,我们更多的是站在底层原理的角度去介绍类与对象之间的关联关系,如果只是站在使用的角度,

    我们无需考虑语法“对象.属性"中”属性“到底源自于哪里,只需要知道是通过对象获取到的就可以了,所以说,对象是一个高度整合的产物,

    有了对象,我们只需要使用”对象.xxx“的语法就可以得到跟这个对象相关的所有数据与功能,十分方便且解耦合程度极高。

     
  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/h1227/p/12654942.html
Copyright © 2011-2022 走看看