• python反射详解


    一、什么是反射

    反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动

    可使用反射的地方:

    1、反射类中的变量 : 静态属性,类方法,静态方法
    2、反射对象中的变量、对象属性、普通方法
    3、 反射模块中的变量
    4、反射本文件中的变量

    getattr(核心)

    判断类、对象或者模块中是否有相应的属性或方法。用法:getattr(obj,str,default=None) 判断obj中是否有str属性,有就返回,没有时有传入第三参数就返回第三参数,没有就报错。

     class A:
        name = 'zs'
        age = 18
    print(getattr(A,'name'))
    print(getattr(A,'language','notfound'))

     settattr

    设置属性。第三参数为新的属性值

    class A:
        name = 'zs'
        age = 18
    setattr(A,'name','ls')
    setattr(A,'language','Chinese')
    print(getattr(A,'name'))
    print(getattr(A,'language','notfound'))

     

    hasattr

    判断时候有某个属性,有就返回True,没有就返回False

    class A:
        name = 'zs'
        age = 18
    if hasattr(A,'name'):
        print(getattr(A,'name'))

    delattr

    删除某个属性

    class A:
        name = 'zs'
        age = 18
    
    delattr(A,'name')
    print(hasattr(A,'name'))

     反射本文件

    sys.modulses[__name__]就是本文件对象。

    import sys
    class A:
        def __repr__(self):
            return '666'
    if hasattr(sys.modules[__name__],'A'):
        print(getattr(sys.modules[__name__],'A')())

     

    二、使用场景

    input
            用户输入的如果是a,那么就打印1,如果输入的是b就打印2
        文件
            从文件中读出的字符串,想转换成变量的名字
        网络
            将网络传输的字符串转换成变量的名字
  • 相关阅读:
    范仁义css3课程---7、文本样式2
    android图片缓存框架Android-Universal-Image-Loader(二)
    Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
    憨人 音译
    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
    Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
    Android开发
    87狂热
    迟志强
    翟惠民
  • 原文地址:https://www.cnblogs.com/linshuhui/p/9567524.html
Copyright © 2020-2023  润新知