什么是反射?
通过类名获得类的实例对象
通过方法名得到方法,实现调用
通过字符串映射object对象的方法或者属性
反射方法
vim a.py
class A:
def __init__(self):
self.name = "zk"
def getName(self):
return self.name
反射方法一:
from a import A
obj = globals()["A"]()
print obj.getName()
反射方法二:
module = __import__("a")
obj = getattr(module, "A")()
print obj.getName()
hasattr(obj,name_str): 判断object是否有name_str这个方法或者属性
getattr(obj,name_str): 获取object对象中与name_str同名的方法或者函数
setattr(obj,name_str,value): 为object对象设置一个以name_str为名的value方法或者属性
delattr(obj,name_str): 删除object对象中的name_str方法或者属性
def set(self):
print "is name: %s" %self.name
class A:
def __init__(self,name):
self.name = name
def getName(self):
return self.name
tt = A("tt")
setattr(tt , "name", set) # 设置
func = getattr(tt,"name") # 获取
func(tt)
hasattr(tt,"name") # 是否存在
delattr(tt,"name") # 删除
应用场景
在做接口自动化的时候,需要通过不同的请求方式,调用不同的函数
class count(object):
def add(self,num):
return num + 2
def sub(self,num):
return num - 2
# 使用反射
method = input("方法>>>:")
c = count()
if hasattr(c,method):
func = getattr(c,method)
print func(2)
else:
print("方法错误")