python反射hasattr getattr setattr delattr
Posted daju
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
删除一个属性。
以上是关于python反射hasattr getattr setattr delattr的主要内容,如果未能解决你的问题,请参考以下文章
python中反射的三个方法hasattr,getattr,setattr
Python的反射机制hasattr() getattr() setattr() 函数使用方法详解
类的特殊方法 反射 getattr hasattr setattr delattr
DAY21 反射(hasattr,getattr,setattr,delattr)
(转)Python自动化运维之13异常处理及反射(__import__,getattr,hasattr,setattr)