Python 反射

Admin 2019-04-28 16:43:21 Python

什么是反射?

通过类名获得类的实例对象

通过方法名得到方法,实现调用

通过字符串映射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("方法错误")
相关文章
最新推荐