前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3学习之反射

python3学习之反射

作者头像
py3study
发布2020-01-06 17:32:32
2420
发布2020-01-06 17:32:32
举报
文章被收录于专栏:python3
代码语言:javascript
复制
1、反射  用于方法调用
利用字符串的形式去对象中操作成员(增/删/查),注意仅是在内存中操作
#hasattr(模块,'字符串'): 判断有没有 ,模块中有没有“字符串”为名字的成员;
  返还True或者False
#getattr(模块,'字符串'): 获取方法,从模块中获取“字符串”为名字的成员
代码语言:javascript
复制
#s3.py
代码语言:javascript
复制
p1():
    ()
p2():
    ()
p3():
    ()
    
#s2.py
代码语言:javascript
复制
import s3

inp = input("Please input function:")

if inp == "p1":
    s3.p1()
elif inp == "p2":
    s3.p2()
elif inp == "p3":
    s3.p3()
代码语言:javascript
复制
##如果inp有100个,我们的代码就很长,所以采用反射的方式会很方便

if hasattr(s3,inp):    #判断inp是否在s3中有同名函数,有返还True,否则返回False
                       #不判断直接getattr时,如果“不存在”会报错
    f = getattr(s3,inp)   #获取s3中名字为inp的函数,赋值给f
    f()                   # 调用inp同名函数
代码语言:javascript
复制
2 反射   用于模块导入

同上,当100个模块中每个模块有100成员时

代码语言:javascript
复制
obj = __import__("字符串")    #导入模块,不存在会报错
func = getattr(obj,"字符串1")  #获取函数

3 当模块不在同一目录下时

代码语言:javascript
复制
obj = __import__("路径."+"字符串",fromlist=True)    #导入模块,不加fromlist参数,只能导入"路径",注意“.”

注意:反射在web框架中用的很多,通过解析url,执行对应功能

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档