反射

反射

1通过字符串的形式,导入模块

2通过字符串的形式,去模块中寻找指定函数,并执行

先看下这个例子

1 #这样导入模块没有问题
2 import comm as cc
3 
4 #也可以这样导入,根据字符串导入模块。dd实际等于上面的as
5 dd= __import__("comm")
6 
7 dd.f1()
字符串导入模块
 1 mod=input("请输入模块:")
 2 mod_func=input("请输入函数:")
 3 
 4 #__import__用于字符串形式的导入模块
 5 aa=__import__(mod)
 6 
 7 #getattr根据字符串查找模块中的函数
 8 func=getattr(aa,mod_func)
 9 
10 result=func()
11 print(result)
验证上面2个定义

 补充:

字符串多层导入

r=__import__('xxx.xxx.xx.abc',fromlist=True)

反射方法:

getattr  根据字符串的形式去某个模块中寻找东西

hasattr  根据字符串的形式去某个模块中判断东西是否存在

setattr  根据字符串的形式去某个模块中设置东西

delattr  根据字符串的形式去某个模块中删除东西

基于反射模拟web框架路由访问

 1 #-*- coding:utf-8 -*-
 2 from conf import account
 3 url=input("输入url:")
 4 des_url=url.split("/")[-1]
 5 
 6 #先用 hasattr看方法是否存在
 7 if hasattr(account,des_url):
 8     #方法存在就直接获取方法
 9     result=getattr(account,des_url)
10     print(result())
11 else:print(404)
web框架路由
原文地址:https://www.cnblogs.com/menkeyi/p/6758985.html