【Python之路】特别篇--Python反射
反射
说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式
1. import commons
2. __import__('commons')
如果是多层导入:
1. from list.text import commons
2. __import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录
实例:
# lib - commons.py NAME = 'Maria'
def f1():
return "F1" def f2():
return "F2" def f3():
return "F3" ****************************
# index.py moudle = __import__('lib.commons',fromlist=True) ret = moudle.f1()
print(ret)
# F1
反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:
moudle = __import__('lib.commons',fromlist=True)
# 获取成员
ret = getattr(moudle,'f1',None) # 可以设置默认值,没找到时 ret = None
print(ret)
# <function f1 at 0x00000090548CF2F0>
# 获取全局变量:
ret = getattr(dd,"NAME",None)
# 检查成员
ret = hasattr(moudle,'f11') # 因为有f1方法所以返回True
print(ret)
# 设置成员
setattr(moudle,"AGE",18) # 内存中创建了一个全局变量
ret = getattr(moudle,'AGE',None)
print(ret)
setattr(moudle,"ADD",lambda a: a +1 ) # 内存中创建了一个函数
ret = getattr(moudle,'ADD',None)
print(ret(100))
# 删除成员
delattr(moudle,'f3')
ret = hasattr(moudle,'f3')
print(ret)
对于反射小节:
反射:
# 根据字符串的形式去某个模块中寻找东西
# 根据字符串的形式去某个模块中判断东西是否存在
# 根据字符串的形式去某个模块中设置东西
# 根据字符串的形式去某个模块中删除东西
# 根据字符串的形式去对象 (某个模块) 中操作成员 结论:
1.根据字符串的形式导入模块。
2.根据字符串的形式去对象(某个模块)中操作其成员
基于反射实现类Web框架的路由系统
实现思路:规定用户输入格式 模块名/函数名 通过__import__的形式导入模块并通过 hasattr和getattr 检查并获取函数返回值。
# lib - commons.py
def login():
return 'login' def logout():
return 'logout' ********************************
# index.py target_url = input('请输入url:')
target_module,target_func =target_url.split('/') moudle = __import__('lib.'+target_module,fromlist=True) if hasattr(moudle,target_func) == True:
func = getattr(moudle,target_func)
ret = func()
print(ret)
else :
print('404 Not Found!')
【Python之路】特别篇--Python反射的更多相关文章
- Python之路(第九篇)Python文件操作
一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r",encoding = “utf ...
- 【Python之路】特别篇--Python面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- 【Python之路】特别篇--Python面向对象(初级篇)
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
- python之路基础篇
基础篇 1.Python基础之初识python 2.Python数据类型之字符串 3.Python数据类型之列表 4.Python数据类型之元祖 5.Python数据类型之字典 6.Python Se ...
- python之路入门篇
一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字,来 ...
- python之路第一篇
一.python环境的搭建 1.window下环境的搭建 (1).在 https://www.python.org/downloads/ 下载自己系统所需要的python版本 (2).安装python ...
- python之路第二篇(基础篇)
入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...
- 【python之路1】python安装与环境变量配置
直接搜索 Python,进入官网,找到下载,根据个人电脑操作系统下载相应的软件.小编的是windows os .下载python-2.7.9.msi 安装包 双击安装程序,进入安装步骤.在安装过程中 ...
- 【Python之路】特别篇--Python切片
字符串切片操作 切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割. 注意: 数是可选的,而冒号是必须的. consequence[start:end:step] 切片操作符中的 ...
随机推荐
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
B. Approximating a Constant Range Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com ...
- MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02
目录 扩展点 查看服务端字符.IP.端口配置 取消本次错误输入 例外情况 database 数据库操作 table 数据表操作 查看MySQL存储引擎 常见几个存储引擎 InnoDB MyISAM M ...
- pb SendMessage
PB发送和接收消息send SendMessage 1.用PB自带的SEND函数发送消息 传字符:Send(Handle(w_main),1600,0,'dfdfd') 传LONG:Send(Hand ...
- golang作用域问题
//参考 https://segmentfault.com/a/1190000012214571 //参考 https://studygolang.com/articles/2215 func bar ...
- Java 面向对象的设计原则
一. 1.面向对象思想的核心: 封装.继承.多态. 2.面向对象编程的追求: 高内聚低耦合的解决方案: 代码的模块化设计: 3.什么是设计模式: 针对反复出现的问题的经典解决方案,是对特定条件下( ...
- 超链接hover切换效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta na ...
- mvc布局(一)
negut添加Optimization @System.Web.Optimization.Styles.Render( "~/Content/styles/css/font-awesome. ...
- Ruby 参考教程
Ruby 参考教程 https://www.ruby-lang.org/zh_cn/documentation/ http://ruby-doc.org/docs/ https://ruby-chin ...
- sql的关键字
整理一下sql的关键字,一直都在用,只是很少去整理,所以今天简单整理一下,主要是整理CRUD的一些关键字. 写在前面:sql 不区分大小写 select 简单查询语句 select columnNam ...
- mysql双yes但是同步延时问题
今天发现在153服务器insert一条数据,然后查看从库154和162都没有这条数据,但是在154和162执行show slave status 显示的双yes 后来重启了153 154 162 ...