模块讲解----反射 (基于web路由的反射)
一、反射的实际案例:
def main():
menu = '''
1、账户信息
2、还款
3、取款
4、转账
5、账单
''' menu_dic = {
'':account_info,
'':repay,
'':withdraw,
'':transfer,
'':pay_check,
} while True:
print(menu)
user_option = input(">>: ").strip()
if user_option in menu_dic:
menu_dic[user_option]()
反射的总结
1、实例:基于实例来说,就是伪造了web框架的路由系统,即通过一个URL,去定义到某一个模块中的函数上。
2、反射:基于字符串的形式去对象(模块)中,操作其成员。
getattr, delattr,setattr,hasattr
3、扩展:导入模块
import xxx
from xxx import ooo
obj = __import__("xxx")
obj = __import__("xxx.oo.xxx"+m, fromlist=True)
'''
根据用户输入的url不同,调用不同的函数。
调用不同的函数,返回不同页面的内容。
''' def login():
print('炫酷登录页面') def logout():
print('炫酷退出页面') def home():
print('炫酷主页面')
2、index模块:(判读用户输入url的不同,返回不同的结果)
'''
判断用户输入的url的不同,显示不同的结果
''' import commons def run():
inp = input('请输入要访问的url>>>')
if inp == 'login':
commons.login()
elif inp == 'logout':
commons.logout()
elif inp == 'home':
commons.home()
else:
print('') if __name__ == '__main__':
run()
#inp获取到的是字符串类型。 inp = “login”
#commons.inp() != commons.login #回去找inp函数,然后执行
#利用字符串的形式去对象(模块)中,去操作(寻找/检查/删除/设置)成员,反射
getattr(commons,inp)
hasattr(commons,inp)
setattr()
delattr()
反射的使用方法
一、通过反射,寻找/检查模块成员:
import commons def run():
inp = input("请输入要访问的url>>> ") #判断模块中的方法是否存在:
if hasattr(commons,inp): #判读模块内的方法是否存在,如果返回为True则调用。 #获取模块中包含的成员:getattr(模块名,用户输入的url)
func = getattr(commons,inp)
func() else: #如果返回False则打印错误信息 404。
print(404) if __name__ == '__main__':
run()
二、字符串模式的寻找、导入模块:
1、特点:基于web框架的URL路由模式的反射
def run():
inp = input('请输入要访问的rul>>> ') #获取url
m,f = inp.split('/') #将url转换成字符串
obj = __import__(m) #导入字符串中的模块 if hasattr(obj,f): #用内置函数判断字符串中的函数和方法是否存在,
func = getattr(obj,f) #如果存在,就调用字符串中的模块和方法
func() #执行调用方法 else: #如果不存在则打印404
print(404) if __name__ == '__main__':
run() #本地函数调用 显示结果:
请输入要访问的rul>>> commons/db_mgs
炫酷的数据库连接信息:
三、导入同级文件夹下的模块:
1、目录结构:
|day6
--| index.py
-- | lib
--| account.py
--| manager.py
--| commons.py
2、案例:
def run():
inp = input('请输入url路径>>>')
m,f = inp.split('/')
obj = __import__("lib."+m, fromlist=True) if hasattr(obj,f):
func = getattr(obj,f)
func() if __name__ == '__main__':
run() 显示结果:
请输入url路径>>>manger/order
炫酷的订单页面:
练习:
#1、定义函数标题:
#登录&注册
login_register = '''
1、登录
2、注册
3、退出
''' login_register_dic = {
'':'acc_login',
'':'acc_auth',
'':'quit'
} #2、定义函数体
def acc_login():
print('this is login') def acc_auth():
print('This is auth') def quit():
print("This is quit") #3、定义反射条件:
from core import logger
from core import login
from core import menu
def run():
'''
被调用的主接口,主要功能如下:
1、展示登录注册信息
2、通过反射的方式,来实现不同的功能选项,尽量避免过多的if判断
'''
label = menu.login_register
login_reg = menu.login_register_dic
flag = False
while not flag:
print(label)
inp = input("请输入编号:").strip()
if inp in login_reg:
if hasattr(login,login_reg[inp]):
func = getattr(login,login_reg[inp])
func() else:
login_log.error("The input number does not exist, please try again !!!")
反射实例
模块讲解----反射 (基于web路由的反射)的更多相关文章
- Python基础篇【第3篇】: Python异常处理、反射、动态导入、利用反射的web框架
异常处理 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当P ...
- C# MVC ( 添加路由规则以及路由的反射机制 )
在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开 (1) 约束的规则 从上往下 贪婪性 (2) 用 routes.MapRoute(...) 添加 ...
- Java反射:Web学习的灵魂
反射:Web学习的灵魂 我们从最初的 javac -HelloWorld.java,到面向对象部分,我们可以将Java代码在计算机中经历的阶段分为三部分:Scource源代码阶段 -- Class类对 ...
- 【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
基于灰度世界.完美反射.动态阈值等图像自动白平衡算法的原理.实现及效果 白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题.白平衡是随着电子影像再现色彩真实 ...
- Hya.io – 基于 Web 的数字音频工作站
Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 ...
- 快速了解Electron:新一代基于Web的跨平台桌面技术
本文引用了作者“ ConardLi”的<用JS开发跨平台桌面应用,从原理到实践>一文部分内容,原文链接:segmentfault.com/a/1190000019426512,感谢原作者的 ...
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- 基于Web在线考试系统的设计与实现
这是一个课程设计的文档,源码及文档数据库我都修改过了,貌似这里复制过来的时候图片不能贴出,下载地址:http://download.csdn.net/detail/sdksdk0/9361973 ...
- 基于Web实现网络拓扑图
想想好像好久没用写博客了! 由于最近想跳槽了(ps:尽管公司挽留,提出一些异与往常的挽留“制度”,But确实已经死心了) ,发现前一段时间一些做Hadoop,和Spark同事时常来请教网络拓扑图的有关 ...
随机推荐
- Neo4j简单的样例
系统环境: Ubuntu 04.10 x64 一:安装 下载最新版:neo4j-community-2.2.3-unix.tar.gz 解压 cd neo4j-community-2.2.3/bin ...
- BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度
题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每一个非叶节点都有恰好n个子节点的树 给定n和d,求深度为d的严格n元树一共同拥有多少种 此题的递推部分并不难 首先我们设深 ...
- POJ 1252 Euro Efficiency(完全背包, 找零问题, 二次DP)
Description On January 1st 2002, The Netherlands, and several other European countries abandoned the ...
- ionic简单路由及页面传参
1)页面跳转及传参方法 angular.module('app.routes', [])//routes路由模型 .config(function($stateProvider, $urlRouter ...
- Python 进阶(三)面向对象编程基础
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkMAAAFGCAIAAADmfgziAAAgAElEQVR4nOx993vT1v7/93/5EEt2Eg
- win8.1简单快速安装phpnow的方法
工具/原料 phpnow 1.5.6 管理员身份登陆系统 方法/步骤 下载phpnow 这是必须的,大家可以自行百度下载,然后我们将phpnow放到一个文件夹,可以是根目录,也可以不是,但一定要知 ...
- java基础---->java中变参函数的使用
Java的变参函数实现实际上参数是一个数组,今天我们就简单的学习一下它的用法. java中的变参函数 一.它的使用方法如下: public class VariableParam { private ...
- window.postMessage跨文档通信
window.postMessage 1.浏览器兼容情况:IE8+.chrome.firefox等较新浏览器都至此. 2.使用方法: a.otherWindow.postMessage( messag ...
- Hibernate插入、查询、删除操作 HQL
Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到SessionFactory: SessionFactory sessionFactory=new C ...
- js的delete和void关键字
delete关键字 delete关键字的作用: 删除对象的属性 语法:delete 对象.属性 可以删除没有使用var关键字声明的全局变量(直接定义在window上面的属性) delete关键字的 ...