反射作用
- 反射是以字符串的方式执行方法
- 以字符串的形式设置属性
反射常用函数 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.color
delattr(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''
del x.y”
delattr (object, name) 将对象的属性删除。delattr(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.name
d1 = 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.py
def hello():
print "hellow "
#cat 反射.py
fanshe_test = __import__("fanshe_test")
if hasattr(fanshe_test,"hello"):
func = getattr(fanshe_test,"hello")
func()
有啥不足之处评论提出,觉得还可以的话,可以点赞关注呦!!!