python中的反射

来源:互联网 发布:移动网络电话号码 编辑:程序博客网 时间:2024/06/04 17:45

 反射说简单点 --> 就是利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员。

第一种:项目的目录如下图,需要导入的文件和可执行文件都在一个目录下


# -*- coding: utf-8 -*-import commons'''  当前是index.py 文件   导入的模块是commons.py 文件'''def main():    #利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员 反射    imp = input('请输入一个方法:')   #比如login    # delattr()  删除内存里面的方法    # setattr()  #设置内存里面的方法    if hasattr(commons,imp):  #判断有没有这个方法       fuc = getattr(commons,imp)  #获得这个方法       fuc()   #会调用 commons文件里面的方法    else:        print('404')

如果我们不想导入 commons.py 文件 比如  import commons  我们可以用 __import__() 来导入模块

# -*- coding: utf-8 -*-'''  当前是index.py 文件   导入的模块是commons.py 文件'''def main():    imp = input('请输入:')  #比如 commons/login    m,f= imp.split("/")    print(m,f)    try:        obj = __import__(m)  #导入该模块  commons模块        print(obj)        if hasattr(obj,f):  #判断有没有这个方法           fuc = getattr(obj,f)  #获得这个方法           fuc()        else:           print('404')    except Exception as e:        print(e)if __name__ == '__main__':    main()


第二种:如果模块的文件这样,模块account.py 在lib目录下,如图



# -*- coding: utf-8 -*-'''  当前是show.py 文件'''def main():    imp = input('请输入:') #比如 account/login    m,f= imp.split("/")    try:        obj = __import__('lib.'+m,fromlist=True)  #导入该模块  account        print(obj)        if hasattr(obj,f):  #判断有没有这个方法           fuc = getattr(obj,f)  #获得这个方法           fuc()        else:           print('404')    except Exception as e:        print(e)if __name__ == '__main__':    main()


1 0
原创粉丝点击