- 反射
通过字符串的形式导入模块,
通过字符串的形式去模块中寻找指定函数,全局变量,并执行
根据字符串的形式去某个模块中寻找东西
总结:根据字符串的形式去某个对象(某个模块)中操作成员
# import commons # getattr 用于以字符串的形式导入模块 inp = input("请输入要导入的模块:") dd = __import__(inp) inp_func = input("请输入要执行的函数:") # r = commons.f1() target_func = getattr(dd, inp_func) result = target_func() # 执行函数 print(result)
# commons.py 模块 NAME = "xinmin" def f1(): return "F1" def f2(): return "F2" def f3(): return "F3"
import commons # 第三个参数表示没找到的时候的默认返回值 target_func = getattr(commons, "f1", None) # 判断是否存在 r = hasattr(commons, "NAME") print(r) # True # 在内存中为模块添加东西(全局变量,函数) setattr(commons, "AGE", 18) # 在内存中出删除模块中的东西,不影响源文件 delattr(commons, "f2")
# 导入模块 import commons # dd = __import__("commons") # 嵌套关系 import lib.test.com # from lib.test import com # fromlist = True 去找模块 # r = __import__("lib.test.com", fromlist = True) # print(r)
# 反射小案列 # account.py模块 def login(): return "login" def logout(): return "logout" def nb(): return "特别牛逼的页面" # ================================================ # index.py 模块 # 版本一 """ from lib import account url = input("请输入url:") if url.endswith("login"): r = account.login() print(r) elif url.endswith("logout"): r = account.logout() print(r) elif url.endswith("nb"): r = account.nb() print(r) else: print("404") """ # 版本二 """ from lib import account url = input("请输入url:") # 使用反射简化if-else的应用 inp = url.split("/")[-1] if hasattr(account, inp): target_func = getattr(account, inp) r = target_func() print(r) else: print("404") """ # 版本三 # 模块名/函数名 # account/login url = input("请输入url:") target_module, target_func = url.split("/") m = __import__("lib." + target_module, fromlist=True) if hasattr(m, target_func): target_func = getattr(m, target_func) r = target_func() print(r) else: print("404")
python进阶 第一天 反射
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 转自:http://www.cnblogs.com/feixuelove1009/p/5576206.html,只...