定义

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

  了解反射前,我先看看内置方法__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. 禁止Chrome浏览器自动升级

    对于我们测试人员来说,浏览器自动升级是非常可怕的,浏览器的升级会导致出现各种bug,比如我们常用的Selenium,如果Chrome浏览器自动升级就会导致脚本出错,无法打开浏览器等等情况,对于这种情况 ...

  2. Mac OS下配置PHP Nginx PHP-FPM

    首先需要安装homebrew, 不赘述了 php-fpm php-fpm是mac下自带的软件, 而且兼容不同的PHP版本, 不用额外安装, 但是fpm是需要配置的, 在/private/etc下有个模 ...

  3. hdu3457(有向图的dp问题)

    同http://www.cnblogs.com/ziyi--caolu/p/3202511.html #include<iostream> #include<stdio.h> ...

  4. java 解压.gz文件

    1.//建立gzip压缩文件输入流 2.建立gzip解压工作流 fileInputStream = new FileInputStream(filePath + fileName); //解凍する G ...

  5. spring boot初步尝试

    第一次知道spring boot这个项目是为在学习spring的时候,在官网上看到的,那个时候不知道这个项目是干嘛的,也就没再继续关注了 这些天实习没什么事做,一直没用spring框架了,就想着去官网 ...

  6. SHLVL--shell终端深度

    参考:How And Why You Would Use The $SHLVL Variable SHLVL代表shell打开的深度,进程第一次打开shell时$SHLVL=1,然后在此shell中再 ...

  7. hive中关键字作为列名的方法

    hive中有很多关键字,直接作为列名,会出错的 例如 下面 user就是关键字,作为字段时报以下错误. 解决方案: 使用·· (ESC下面的那个键,点号)两个符号包裹即可.

  8. iOS开发小技巧--键盘处理以及解决block造成循环引用的小技巧

  9. Android Studio 工具栏添加图标

    本文中 Android Studio 的版本为 Android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异.在工具栏中添加一些常用的图标有利于我们开发,举例说明: ...

  10. MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

    由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类.Dao接口类甚至Mappi ...