python反射

来源:互联网 发布:男士护肤 知乎 编辑:程序博客网 时间:2024/06/05 19:19

反射作用

  • 反射是以字符串的方式执行方法
  • 以字符串的形式设置属性

反射常用函数 hasattr,getattr,setattr,delattr

示例1 初识函数

class Dog(object):    def __init__(self,name):        self.name = name        self.color = "red"    def say(self):        print "my name is %s" %self.name    def eat(self):        print "%s eating" %self.name      d1 = Dog("qiaoqiao")has_say = hasattr(d1,"say")print type(has_say)get_say = getattr(d1,"say","ddd")get_say()setattr(d1,"name","benben")setattr(d1,"color","blue")print d1.say()print d1.colordelattr(d1,"color")

hasatrt hasattr(object, name) -> bool 用于判断对象有没有这个方法,第一个参数是对象,第二个为字符串,返回值为布尔类型。
getattr (object, name[, default]) -> value 用于执行对象的方法,getattr(x, ‘y’) 等于 x.y。如果没有这个方法,会报异常
setattr(object, name, value) 设置对象的属性,setattr(x, ‘y’, v) 等于 x.y = v''
delattr (object, name) 将对象的属性删除。delattr(x, 'y') 等于
del x.y”

示例二: 根据用户输入执行相应的方法

class Dog(object):    def __init__(self,name):        self.name = name        self.color = "red"    def say(self):        print "my name is %s" %self.name    def eat(self):        print "%s eating" %self.named1 = Dog("xiaohei")while True:    in_func = raw_input("The dog to do:")    if hasattr(d1,in_func):        func = getattr(d1,in_func)        func()    else:        print "It can't do it!!"

示例二:动态导入函数

#cat fanshe_test.pydef hello():    print "hellow "#cat 反射.pyfanshe_test = __import__("fanshe_test")if hasattr(fanshe_test,"hello"):    func = getattr(fanshe_test,"hello")    func()

有啥不足之处评论提出,觉得还可以的话,可以点赞关注呦!!!