码迷,mamicode.com
首页 > 编程语言 > 详细

python反射机制实现

时间:2018-01-05 19:06:50      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:变量   ons   输入   参数   结果   log   else   color   字符   

笔者之前看到很多撸java的同事。老是说着反射机制什么的,然后就想想我大Python肯定也有反射机制的实现方法,于是就写了下面的一段python实现的反射机制代码:

comm模块代码

1 def jk():
2     name = huangsonghui
3     print(name)
4     return {1,2,3}

main模块代码:

import comm
def
run(): inp = input(enter:) if hasattr(comm,inp): d = getattr(comm,inp)#gatattr第一个参数comm为模块,对象也可以,第二个参数必须是字符串 print(d()) else: print(404) run()

首先说明一下getattr函数的使用方法:它接收2个参数,前面的是一个对象或者模块,后面的是一个字符串,注意了!是个字符串!

例子中,用户输入储存在inp中,这个inp就是个字符串,getattr函数让程序去commons这个模块里,寻找一个叫inp的成员(是叫,不是等于),这个过程就相当于我们把一个字符串变成一个函数名的过程。然后,把获得的结果赋值给func这个变量,实际上func就指向了commons里的某个函数。最后通过调用func函数,实现对commons里函数的调用。这完全就是一个动态访问的过程,一切都不写死,全部根据用户输入来变化。

执行上面的代码,结果和最开始的是一样的。

这就是python的反射,它的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

通过hasattr的判断,可以防止非法输入错误,并将其统一定位到错误页面。

其实,研究过python内置函数的朋友,应该注意到还有delattr和setattr两个内置函数。从字面上已经很好理解他们的作用了。

python的四个重要内置函数:getattr、hasattr、delattr和setattr较为全面的实现了基于字符串的反射机制。他们都是对内存内的模块进行操作,并不会对源文件进行修改。




 

python反射机制实现

标签:变量   ons   输入   参数   结果   log   else   color   字符   

原文地址:https://www.cnblogs.com/Huangsh2017Come-on/p/8206185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!