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)

Python hasattr,getattr,setattr,delattr