反射介绍
Python是动态语言,而反射机制被视为动态语言的关键。(动态语言,属性赋值是不需要指定类型,当语句执行时程序会自动判断属性的类型。)
反射指的是在程序运行过程中以“动态”获取对象的信息(方法和属性)。
- 对于任意一个类,都可以知道这个类的所有属性和方法;
- 对于任意一个对象,都能够调用它的所有属性和方法;
(简单理解就是通过对象或类+”.”能够显示出这个对象或类的所有属性和方法)
反射就是通过字符串的形式去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作成员(查找/获取/删除/添加)。
实现反射机制的步骤
先通过
dir()
内置函数,查看出某一个对象可以.
出哪些属性来;dir(obj)
可以通过
dir()
获取到的字符串映射到真正的属性上,得到属性值;使用四个内置函数,通过上面获取到的字符串操作属性值
hasattr() 判断实例是否存在字符串对应的属性及方法
hasattr(obj,'name')
getattr() 获取字符串对应的属性/方法
getattr(obj,'name')
setattr() 为字符串对应的已存在的属性设置内容
setattr(obj,'name','laobai')
delattr() 删除实例中字符串对应的属性
delattr(obj,'name')
示例
class Ftp:
def upload(self):
print('正在执行上传功能。。。')
def download(self):
print('正在执行下载功能。。。')
def interactive(self):
method = input(">>>: ").strip()
if hasattr(self,method):
getattr(self,method)()
else:
print('输入的指令不存在')
obj = Ftp()
obj.interactive()
执行结果:
输入不存在的属性
>>>: web
输入的指令不存在
输入存在的属性
>>>: upload
正在执行上传功能。。。