定义

  反射是根据字符串的形式去对操作其成员

  了解反射前,我先看看内置方法__import__,还记得这个内置方法吗?

  • __import__  用于以字符串的形式导入模块
inp = input('请输入你要导入的模块:')
mokuai = __import__(inp) #import xml as mokuai
print(mokuai.__doc__)
  • getattr  用于以字符串的形式去某个模块寻找函数
import re
str_func = input('请输入你要执行re下的方法:')
tar_func = getattr(re,str_func)
print(tar_func) #打印找到函数的内存地址

反射成员

  • getattr   用于以字符串的形式去某个模块寻找函数

import re
str_func = input('请输入你要执行re下的方法:')
tar_func = getattr(re,str_func,None) #找到了就返回函数,没有找到就返回None,不设置None,没找到就报错
print(tar_func) #打印找到函数的内存地址
  • hasattr  根据字符串的形式去某个模块中查看是否存在某东西

import re
ret1 = hasattr(re,'match')
print(ret1)
ret2 = hasattr(re,'fjfijajfojg')
print(ret2)
  • setattr 设置

r = hasattr(commons,'age')
print(r) #False
setattr(commons,'age',lambda a:a + 1)
r = getattr(commons,'age') #没报错
ret = r(1)
print(ret)
  • delattr 删除

实例:web框架的路由系统

from lib import account
url = input('请输入url:')
inp = url.split('/')[-1]
if hasattr(account,inp):
func = getattr(account,inp)
func()
else:
print('')
url = input('请输入url:')
target_module,target_func = url.split('/')
m = __import__('lib.'+target_module,fromlist=True)
if hasattr(m,target_func):
tar_func = getattr(m,target_func)
r = tar_func()
print(r)
else:
print('')

                                                欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                             笔者:拍省先生 

python基础-第七篇-7.3反射的更多相关文章

  1. python基础-第七篇-7.2面向对象(进阶篇)

    进入到今天的探索前,我先对上节内容进行一下回顾: 面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用 类是一个模板,模板中包装了多个函数可供使用 对象是基于类创建的,实例用于调用被包装在类 ...

  2. python基础-第七篇-7.4异常处理

    异常基础: 异常处理首先要捕获异常,不让程序中断,也不让错误信息直接呈现出来,然后就是你该怎么处理异常,以什么方式显示 try: pass except Exception,ex: pass 在需要用 ...

  3. python基础-第七篇-7.1初识类和对象

    创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...

  4. Python【第七篇】面向对象进阶

    大纲 一.面向对象高级语法 1.静态方法.类方法.属性方法 2.类的特殊成员方法 3.反射 二.异常处理 三.网络编程之socket基础 一.面向对象高级语法 1.静态方法:名义上归类管理,实际上静态 ...

  5. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  6. python基础-第六篇-6.2模块

    python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...

  7. Python基础【第一篇】

     一.Python简介 Python的创始人(Guido von Rossum 荷兰人),Guido希望有一种语言既能像C一样方便地调用操作系统的功能接口,也能像shell脚本一样,轻松地实现编程,A ...

  8. python基础知识第一篇(认识Python)

    开发语言: 高级语言:python java php c++ 生成的字节码 字节码转换为机器码 计算机识别运行 低级语言:C 汇编 生成的机器码 PHP语言:适用于网页,局限性 Python,Java ...

  9. 【python自动化第七篇:面向对象进阶】

    知识点概览: 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 socket开发基础 一.静态方法:@staticmethod 只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何 ...

随机推荐

  1. 《LAMP系统工程师实用教程》读书笔记(一)- linux常用命令

    图书馆看到就借回来啦,这本书虽然其貌不扬,对新手还是挺棒的.来学下shell脚本和php. 把书上不熟悉的命令和选项记录下. mkdir -v创建文件夹并返回信息 mkdir -m创建文件夹并设定权限 ...

  2. doc转docx以及type对应的类型

    https://blog.csdn.net/flagang/article/details/51454665 // 作为type格式保存到临时文件 // *Variant(0):doc // *Var ...

  3. xadmin 安装详解

    1.安装必要的包 django>=1.9.0 django-crispy-forms>=1.6.0 django-import-export>=0.5.1 django-revers ...

  4. 对java中arraylist深入理解

    1.ArrayList插入删除一定慢么? 取决于你删除的元素离数组末端有多远,ArrayList拿来作为堆栈来用还是挺合适的,push和pop操作完全不涉及数据移动操作. 2.ArrayList的遍历 ...

  5. MongoDB(二):MongoDB简介及安装

    一.MongoDB 1.简介 MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.旨在为WEB应用提供可扩展的高性能数据存储解决方案.在高负载的情况下,添加更多的节点(分布式 ...

  6. 抹掉Scala的糖衣(14) -- Update Method

    欢迎关注我的新博客地址:http://cuipengfei.me/ 在Scala中,名字叫做update的方法是有特殊作用的. 比如: 1 2 3 val scores = new scala.col ...

  7. tp 批量转码

    读取王正东成功,然后把乱码一条一条的改回来... 专门针对mssql数据库的!!!

  8. java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable

    转载系列自http://www.cnblogs.com/skywang12345/p/java_threads_category.html 当使用第一种方式(继承Thread的方式)来生成线程对象时, ...

  9. 配置sudo su

    买了UCloud的机器默认给的是root权限,从安全考虑,这个得改改,那就添加一个普通用户吧.. 可是那群民工又有话说了,得有root权限才能启动那些服务进程,每次都要输入root密码才能切换到roo ...

  10. js中的问题(this)(遍历对象中的属性)

    for (var i in this) { if (this[i] == null) this[i] = "";//属性如果为null,则默认为"";      ...