• 工作记录 反射


    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)
    
    
    


  • 相关阅读:
    ZZ: kvm qemu kqemu qemu-kvm libvirt
    ZZ:爬虫
    Mac下安装及配置Appium环境
    badboy使用手册
    如何正确做 Web端压力测试?
    关于web页面性能测量指标与建议
    Pycharm的使用一
    如何下载安装Python
    apache jmeter下载与安装
    但行其事,不问前程
  • 原文地址:https://www.cnblogs.com/Ebola-/p/8329465.html
Copyright © 2020-2023  润新知