Python开发【第一篇】Python基础之反射
反射
反射的作用:反射得作用是提高代码可读行。
__import__导入模块和import导入模块的区别:
__import__导入模块是通过字符串进行导入。 import是常用得导入模块方法。
扩展:
import xxx
from xxx import ooo
obj = __import__("xxx")
obj = __import__("xxx.oo.xxx",fromlist=True)
反射常用到得4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员。
实例:
最初模块调用是这样得:
# commons.py
def login():
print('炫酷的登录页面')
def logout():
print('炫酷的退出页面')
def home():
print('炫酷的主页面')
# index.py
import commons
def run():
inp = input('请输入要访问的url:')
if inp == 'login':
commons.login()
elif inp == 'logout':
commons.logout()
elif inp == 'home':
commons.home()
else:
print('404')
用了反射后是这样得:
#commons.py
def login():
print('炫酷的登录页面')
def logout():
print('炫酷的退出页面')
def home():
print('炫酷的主页面')
#index.py
import commons
def run():
inp = input('请输入要访问的url:')
# inp字符串类型 inp = "login"
# 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员
# delattr()
# setattr()
if hasattr(commons, inp):
func = getattr(commons,inp)
func()
else:
print('404')
if __name__ == '__main__':
run()
模块也可以通过字符串进行导入:
def run():
# account/login
inp = input('请输入要访问的url:')
# inp字符串类型 inp = "login"
# 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员
# delattr()
# setattr()
m, f = inp.split('/')
obj = __import__(m)
if hasattr(obj, f):
func = getattr(obj,f)
func()
else:
print('404')
if __name__ == '__main__':
run()




对于反射小节:
1、根据字符串的形式导入模块。 2、根据字符串的形式去对象(某个模块)中操作其成员。
实例:伪造web框架的路由系统
def run():
# account/login
inp = input('请输入要访问的url:')
# inp字符串类型 inp = "login"
# 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员
# delattr()
# setattr()
m, f = inp.split('/')
obj = __import__("lib." + m,fromlist=True)
if hasattr(obj, f):
func = getattr(obj, f)
func()
else:
print('404')
if __name__ == '__main__':
run()

Python开发【第一篇】Python基础之反射的更多相关文章
- Python开发 第一篇 python的前世今生
Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- Python【第一篇】基础介绍
一.本节主要内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc文件 数据类型初识 数据运算 表达式if ...else语 ...
- python开发第一篇:初识python
一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
- Python开发第一篇
Python 是什么? 首先他可能是比较好的一个编程开发语言!
- Python unittest第一篇:基础入门+命令行编译
unittest单元测试框架最初受JUnit启发,与其他语言的主要单元测试框架具有相似的风格. 它支持测试自动化,支持开启或关闭某个测试,支持结合测试.另外它可以生成各个单元测试的报告.为了实现以上功 ...
- MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)
在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Jav ...
- 图解Python 【第一篇】:Python基础1
本节内容一览图 一.Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间, ...
- 各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。
Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途 ...
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
- python第一篇-------python介绍
一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...
随机推荐
- 用bootstrapValidator来验证UEditor
我们的项目使用了bootstrapValidator来作为前端校验,但是表单里面有一个UEditor,它用bootstrapValidator是没有效果的,为了页面风格统一,只好修修改改咯 首先来看一 ...
- 2013年arcgis培训
关于开展“GIS空间分析及应用案例解析”培训班的通知 各企事业单位: 随着信息技术的发展,地理信息系统(简称GIS)产业异军突起,在国民经济各个行业中的应用日益广泛,物联网.智慧地球.3S技术等等 ...
- 【阿里云产品公测】云引擎ACE初体验
作者:阿里云用户蓝色之鹰 :RYYjmG5; 来投票支持我把=i2]qj\ 序号2. [阿里云产品公测]云引擎ACE初体验:作者:蓝色之鹰 e(OKE7 序号10.[阿里云产品公测]结构化数据服 ...
- 【Android 界面效果42】如何自定义字体
项目里要统一用设计师的字体,android:typeface只支持系统三种字体.有什么比较好的做法? 你需要为整个应用替换自定义字体. 解决方案 1)Android默认方法 #1 你可以通过ID查找到 ...
- Ios入门
storyboard 文件的认识 用来描述软件界面 默认情况下程序启动就会加载Main.storyboard 加载storyboard时,会首先创建和显示箭头所指向的控制器界面 什么是UIscroll ...
- 重构8-Replace Inheritance with Delegation(委托替换继承)
继承的误用十分普遍.它只能用于逻辑环境,但却经常用于简化,这导致复杂的没有意义的继承层次.看下面的代码: public class Sanitation{ public String WashHand ...
- struts2 零配置
一.新建一个web项目,命名为:struts2 二.导入strut2所需的jar包 所需jar下载:http://pan.baidu.com/s/1dDxP4Z3 三.配置struts2的启动文件,在 ...
- POJ 2421 Constructing Roads (最小生成树)
Constructing Roads Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- Matlab之文件操作
1.判断是否存在文件夹:if (exist(folderName,'dir')) 2.创建文件夹:mkdir(folderName) 3.删除文件夹:rmdir(folderName,'s') 4.当 ...
- 【转载】在 Visual Studio 2012 中创建 ASP.Net Web Service
在 Visual Studio 2012 中创建 ASP.Net Web Service,步骤非常简单.如下: 第一步:创建一个“ASP.Net Empty Web Application”项目 创建 ...