定义

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

  了解反射前,我先看看内置方法__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. hdu1331(记忆化搜索)

    #include<iostream> #include<stdio.h> #include<string.h> using namespace std; typed ...

  2. postgresql解决锁表

    --查询是否锁表了select oid from pg_class where relname='可能锁表了的表'select pid from pg_locks where relation='上面 ...

  3. Android——Android Studio的一些小技巧(转)

    ndroid课程---Android Studio的一些小技巧   APK瘦身 在Android Studio中我们可以开启混淆,和自动删除没有Resources文件,来达到给APP瘦身的目的,这对于 ...

  4. TVS二极管的主要参数与选型

    TVS二极管的主要参数--转载 处理瞬时脉冲对器件损害的最好办法是将瞬时电流从敏感器件引开.TVS二极管在线路板上与被保护线路并联,当瞬时电压超过电路正常工作电压后,TVS二极管便发生雪崩,提供给瞬时 ...

  5. asp.net 下载的几种方式

    protected void Button1_Click(object sender, EventArgs e)  {  /*  微软为Response对象提供了一个新的方法TransmitFile来 ...

  6. DP - 字符混编

    字符混编 Problem's Link ---------------------------------------------------------------------------- Mea ...

  7. 点击edittext并显示其内容

    package com.example.sum;//sum import com.example.sum.R;//sum import android.app.Activity; import and ...

  8. openssl升级并发症

    简单介绍一下系统环境: 操作系统:redhat6.3 ,安装的主要涉及到的包有: root@192.168.100.252:/root# rpm -qa | grep ssh openssh-.3p1 ...

  9. MathType中输入不了汉字如何处理

    MathType作为一款常见的数学公式编辑器在编辑数学公式时,不仅可以输入英文字符,对中文也有很好的兼容性.但是有些用户在使用MathType编辑公式时,发现一些汉字是输入不进去的,这个时候我们就需要 ...

  10. 部署mysql后,无法设置用户远程登陆(%只所有用户,不可以,只能给指定的ip?)

    MySQL允许远程访问的设置 1.注释bind-address = 127.0.0.1. 代码如下: >sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 将 ...