• python反射hasattr getattr setattr delattr


    反射 : 是用字符串类型的名字 去操作 变量

    相比于用eval('print(name)') 留有 安全隐患

     反射 就没有安全问题

    hasattr 语法:

    hasattr(object, name)
    object可以是对象,类,模块,当前Py文件.
    name是一个给字符串数据类型,可以是变量(属性),函数(方法)。
    如果name在object中存在,则返回Ture,否则返回False。

    getattr与hasattr语法相同,返回的结果是对应name的值或函数。

     反射对象的方法
    a.func()
     ret = getattr(a,'func')
     ret()
    
     class A:
         price = 20
         @classmethod
         def func(cls):
             print('in func')
     反射类的属性
     A.price
    print(getattr(A,'price'))
    
     反射类的方法 :classmethod staticmethod
     A.func()
     if hasattr(A,'func'):
         getattr(A,'func')()
    
    模块
     import my
     反射模块的属性
     print(my.day)
     print(getattr(my,'day'))
    
     反射模块的方法
     getattr(my,'wahaha')()
    
     内置模块也能用
     time
     asctime
     import time
     print(getattr(time,'time')())
     print(getattr(time,'asctime')())
    
     def qqxing():
         print('qqxing')
     year = 2018
     import sys
      print(sys.modules['__main__'].year)
      反射自己模块中的变量
      print(getattr(sys.modules['__main__'],'year'))
    
      反射自己模块中的函数
      getattr(sys.modules['__main__'],'qqxing')()
     变量名 = input('>>>')
     print(getattr(sys.modules[__name__],变量名))
    
     要反射的函数有参数怎么办?
     print(time.strftime('%Y-%m-%d %H:%M:S'))
     print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S'))
    
     一个模块中的类能不能反射得到
     import my
     print(getattr(my,'C')())
     if hasattr(my,'name'):
         getattr(my,'name')

    注意:反射本py文件的name时

    用sys.modules[__name__]取代sys.modules['__main__'],因为当别的文件把此py文件作为模块导入后__main__变为新的文件了,使用__name__变量则保证不会出现语法错误。





    setattr() 语法:

    
    
    setattr(object, name, value)
    设置属性值

    delattr 语法:

    delattr(object, name)
    删除一个属性。
     
     
     
  • 相关阅读:
    The type android.support.v4.app.TaskStackBuilder$SupportParentable cannot be resolved.
    Errors running builder 'Android Pre Compiler' on project
    Android SDK Version 对应的 rom 版本
    随手记Note—团队总结汇报
    第四次团队作业
    随手记note(第三次团队作业)
    随手记note(第二次团队作业)
    随手记note(记事簿)
    小学生四则运算生成器
    软件工程结对编程作业
  • 原文地址:https://www.cnblogs.com/daju/p/10235773.html
Copyright © 2020-2023  润新知