python基础知识8:反射
2017-12-17 00:00
405 查看
反射的思想:利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员。
主要操作方法:getattr、hasattr、setattr、delattr
在调用函数时,可以用f(),但不能用"f"(),因为后面一个是字符形式的;
场景设计:伪造web框架的路由系统
假设有一个commons,里面有些公共的程序:def login():
print("你已经进入登陆页面!")
def logout():
print("你已经退出了!")
def home():
print("你已经进入网站主页面!")
另有一个index文件,需要去commons里面去执行程序:;
案例1:接受用户输入,展示相应的页面,此法比较费时费力。如果commons模块里有成百上千个函数呢,就要写n多个elifimport commons
def run():
inp=input("请输入要访问的页面")
if inp=="login":
commons.login()
elif inp=="logout":
commons.logout()
elif inp == "home":
commons.home()
else:
print('404')
if __name__=='__main__':
run()
执行结果:
案例2:利用反射的思路,使用getattr,改善案例1的数据。
getattr函数的使用方法:它接收2个参数,前面的是一个对象或者模块,后面的是一个字符串。
import commons
def run():
inp=input("请输入要访问的页面")
func=getattr(commons,inp)
func()
if __name__=='__main__':
run()
执行结果:
:
案例3:使用hasattr先检查是否有此程序,有再去执行。import commons
def run():
inp=input("请输入要访问的页面")
if hasattr(commons,inp):
func=getattr(commons,inp)
func()
else:
print('404')
if __name__=='__main__':
run()以字符串的方式去寻找模块
案例4:以字符串的形式去导入模块,
obi=__import__(m)
#模块的导入,也用字符控制
def run():
inp=input("请输入要访问的页面")#输入的格式:模块/程序
m,f=inp.split('/')
obj=__import__(m)
if hasattr(obj,f):
func=getattr(obj,f)
func()
else:
print('404')
if __name__=='__main__':
run()
具体请参考: http://www.jb51.net/article/87479.htm
主要操作方法:getattr、hasattr、setattr、delattr
在调用函数时,可以用f(),但不能用"f"(),因为后面一个是字符形式的;
场景设计:伪造web框架的路由系统
假设有一个commons,里面有些公共的程序:def login():
print("你已经进入登陆页面!")
def logout():
print("你已经退出了!")
def home():
print("你已经进入网站主页面!")
另有一个index文件,需要去commons里面去执行程序:;
案例1:接受用户输入,展示相应的页面,此法比较费时费力。如果commons模块里有成百上千个函数呢,就要写n多个elifimport commons
def run():
inp=input("请输入要访问的页面")
if inp=="login":
commons.login()
elif inp=="logout":
commons.logout()
elif inp == "home":
commons.home()
else:
print('404')
if __name__=='__main__':
run()
执行结果:
案例2:利用反射的思路,使用getattr,改善案例1的数据。
getattr函数的使用方法:它接收2个参数,前面的是一个对象或者模块,后面的是一个字符串。
import commons
def run():
inp=input("请输入要访问的页面")
func=getattr(commons,inp)
func()
if __name__=='__main__':
run()
执行结果:
:
案例3:使用hasattr先检查是否有此程序,有再去执行。import commons
def run():
inp=input("请输入要访问的页面")
if hasattr(commons,inp):
func=getattr(commons,inp)
func()
else:
print('404')
if __name__=='__main__':
run()以字符串的方式去寻找模块
案例4:以字符串的形式去导入模块,
obi=__import__(m)
#模块的导入,也用字符控制
def run():
inp=input("请输入要访问的页面")#输入的格式:模块/程序
m,f=inp.split('/')
obj=__import__(m)
if hasattr(obj,f):
func=getattr(obj,f)
func()
else:
print('404')
if __name__=='__main__':
run()
具体请参考: http://www.jb51.net/article/87479.htm
相关文章推荐
- Python3之反射基础知识
- python基础知识
- python的基础知识
- [Python03]-基础知识点
- 【脚本语言系列】关于Python基础知识处理字符串,你需要知道的事
- Python基础知识(2)——函数
- Python基础知识之排序法
- Python 编程中常用的 12 种基础知识总结
- Python Re模块基础知识
- Python学习笔记-第一章 基础知识
- Python第一章-基础知识
- python学习笔记-Day14 -css基础知识-part2
- python爬虫基础知识
- [Python基础知识] - iteration,iterator 和 iterable 的学习笔记
- Python 基础知识之字符串处理
- Python基础知识之生成器
- (总结)python基础知识二.2
- java反射基础知识总结
- Python(2)——基础知识爬坑
- Python 基础知识