zoukankan      html  css  js  c++  java
  • 工作记录 反射

    1、反射

    反射的存在解决了eval的安全问题,eval是接收外界输入进行执行,而反射是对已有的东西进行转换或者操作相对安全

    反射对象中的反射方法  hasattr getattr setattr delattr

    getattr 

    class A:
        price = 0.3
        def fun(self):
            print('1111')
        def fun1(self,age):
            print('111{}'.format(age))
        @classmethod
        def change_price(cls):
             cls.price = 0.7
    a = A()
    a.name = 'ebola'
    print(getattr(a,'name'))    #对象调用属性
    getattr(A,'fun1')(a,'22')   #类调用方法
    getattr(a,'fun1')('22')  #对象调用方法
    print(getattr(A,'price')) #查看静态属性
    getattr(A,'change_price')()  #执行改变的函数  是价格变成了0.7
    print(getattr(a,'price'))
    print(getattr(A,'price'))
    使用场景
    变量名 = input('请输入查看的属性')
    print(getattr(a,变量名))  #返回的字符串直接执行就可以
    # 夫妻档
    if hasattr(A,'fun1'):  #先判断有没有这个方法
        getattr(A,'fun1')()  #执行这个方法
    反射模块的方法   模块名.模块名中的函数名字字符串
    import sys
    sys.path.append(r'C:UserszzzzzzDesktoppython【Ebola】day - 副本 (27)y.py')
    import y
    getattr(y,'fun1')()
    a = y.A()   #调用模块的类
    a.fun()
    C1 = getattr(y,'A')()  #调用模块中的类  再加上括号相当于实例化
    print(C1.price)
    调用自身模块
    name = '小明'
    print(getattr(sys.modules[__name__],'name')) #调用自身模块中的变量
    a = getattr(sys.modules[__name__],'A')()   #调用自身模块中的类
    print(getattr(a,'price'))
    setattr  设置修改变量(添加)   deltattr  删除一个变量

    class A:
        pass
    a = A()
    setattr(A,'name','gaojiantao')  #添加一个静态变量
    setattr(a,'name','luliu')  #添加一个动态变量
    print(a.name)
    delattr(a,'name')   #删除对象a 中的name
    print(a.name)     #name被删除去找 就去类中找
    print(A.name)
    
    
    


  • 相关阅读:
    元数据的优势
    老婆从今天开始出差
    清单元数据表中的导出类型定义
    Singleton模式
    拖管代码的优势
    元数据
    "软件随想录"阅读笔记
    《敏捷软件开发》学习笔记:敏捷设计原则
    项目管理中的三个"凡是"
    Python基础(1):数据类型
  • 原文地址:https://www.cnblogs.com/Ebola-/p/8329465.html
Copyright © 2011-2022 走看看