python基础-第七篇-7.3反射

定义

  反射是根据字符串的形式去对操作其成员

  了解反射前,我先看看内置方法__import__,还记得这个内置方法吗?

  • __import__  用于以字符串的形式导入模块
inp = input('请输入你要导入的模块:')
mokuai = __import__(inp)  #import xml as mokuai
print(mokuai.__doc__)
  • getattr  用于以字符串的形式去某个模块寻找函数
import re
str_func = input('请输入你要执行re下的方法:')
tar_func = getattr(re,str_func)
print(tar_func) #打印找到函数的内存地址

 

反射成员

  • getattr   用于以字符串的形式去某个模块寻找函数

import re
str_func = input('请输入你要执行re下的方法:')
tar_func = getattr(re,str_func,None)  #找到了就返回函数,没有找到就返回None,不设置None,没找到就报错
print(tar_func) #打印找到函数的内存地址
  • hasattr  根据字符串的形式去某个模块中查看是否存在某东西

import re
ret1 = hasattr(re,'match')
print(ret1)
ret2 = hasattr(re,'fjfijajfojg')
print(ret2)
  • setattr 设置

r = hasattr(commons,'age')
print(r)  #False
setattr(commons,'age',lambda a:a + 1)
r = getattr(commons,'age')  #没报错
ret = r(1)
print(ret)
  • delattr 删除

 

实例:web框架的路由系统

from lib import account
url = input('请输入url:')
inp = url.split('/')[-1]
if hasattr(account,inp):
    func = getattr(account,inp)
    func()
else:
    print('404')

 

url = input('请输入url:')
target_module,target_func = url.split('/')
m = __import__('lib.'+target_module,fromlist=True)
if hasattr(m,target_func):
    tar_func = getattr(m,target_func)
    r = tar_func()
    print(r)
else:
    print('404')

 

                                                欢迎大家对我的博客内容提出质疑和提问!谢谢

 

 

                                                                             笔者:拍省先生 

posted @ 2016-07-05 22:27  财经知识狂魔  阅读(258)  评论(0编辑  收藏  举报