Python反射
所谓“反射”,指的是以字符串的形式来操作(包括:增删改查)对象的属性和方法 。
用于“反射”的内置函数有以下四个:
- hasattr
- getattr
- setattr
- delattr
# 反射的四个内置方法
class Animal(object):
def __init__(self):
self.name = 'animal'
def eat(self):
print('%s eat' % self.name)
dog = Animal()
print(hasattr(dog, 'name')) # True
print(getattr(dog, 'name')) # animal
setattr(dog, 'name','dog') # 相当于dog.name = dog
print(getattr(dog, 'name')) # dog
delattr(dog, 'name') # 相当于del dog.name
print(hasattr(dog, 'name')) # False
只有在不知道对象信息的情况下,才会去获取对象信息。
举个例子:别的程序传给你一个变量var,这个变量是一个字符串,并且这个字符串对应某个模块下的某个函数名,如果你通过变量var直接导入该模块下的该函数,肯定是不行的,因为var是个变量,这时就可以使用反射,例如:var=”xxx” f=getattr(module,var),这样,就得到了var对应的模块中的函数f,接下来就可以调用f了。