• day29


    反射:

    什么是反射?指的是在程序运行过程中可以“动态”获取对象的信息(属性和功能)
    为什么用反射?python是动态语言,反射被视为动态语言的关键
    如何使用反射?
    实现反射机制的步骤:
    1.先通过dir查看某一个对象下的属性
    2.通过字符串反射到真正的属性上,得到属性值
    四个内置函数的使用,通过字符串来操作属性
    hasattr() hasattr(object,'name')
    getattr() getattr(object, 'name', default=None)
    setattr() setattr(x, 'y', v)
    delattr() delattr(x, 'y')
    静态语言反射机制的意义?

    内置方法__str__,__del__
    __str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型
    __del__会在对象被删除时自动触发。由于Python自带的垃圾回收机制会自动清理Python程序的资源,所以当一个对象只占用应用程序级资源时,完全没必要为对象定制__del__方法,但在产生一个对象的同时涉及到申请系统资源(比如系统打开的文件、网络连接等)的情况下,关于系统资源的回收,Python的垃圾回收机制便派不上用场了,需要我们为对象定制该方法,用来在对象被删除时自动触发回收系统资源的操作
    元类:什么是元类?
    引入:一切皆对象
    元类就是用来实例化产生类的类
    我们用class关键字定义的所有的类都是由内置的type元类来产生的
    class关键字创造类的过程:
    类有三大特征:类名 类的父类 执行类体代码拿到类的名称空间
    调用元类依次传入上述三个特征
    如何自定义元类来控制类的产生:
    一个类没有声明自己的元类,默认他的元类就是type,除了使用内置元类type,我们也可以通过继承type来自定义元类,然后使用metaclass关键字参数为一个类指定元类
    类的产生过程其实就是元类的调用过程
    调用类发生了三件事:
    先造了一个空对象 调用类内的__new__方法
    调用Mymeta类内的__init__方法,完成初始化对象
    返回初始化好的对象 调用__call__方法
    属性查找:属性查找应该分成两层,一层是对象层(基于c3算法的MRO)的查找,另外一个层则是类层(即元类层)的查找
    查找顺序:
    1、先对象层:StanfordTeacher->Foo->Bar->object
    2、然后元类层:Mymeta->type

  • 相关阅读:
    Python基础之文件、目录
    Python基础知识之基本类型、循环
    Python基础知识之函数、模块
    Python基础之小知识要点
    【Android】ADB常用指令与logcat日志(转)
    Android 中的 Service 全面总结 (转)
    Android实现双进程守护 (转)
    Android adb常见问题整理(转)
    Android代码内存优化建议-OnTrimMemory优化
    优化Android应用内存的若干方法
  • 原文地址:https://www.cnblogs.com/Jicc-J/p/12708530.html
Copyright © 2020-2023  润新知