zoukankan      html  css  js  c++  java
  • 三十八、python中反射介绍


    一、反射:根据字符串的形式去对象(某个模块)中去操作成员
    通过字符串的形式,导入模块
    通过字符串的形式,去模块中寻找指定的函数,并执行

    1.__import__:用于字符串的形似执行导入模块
      
    inp=input("请输入模块名:")
    #print(inp,type(inp))

    #__import__用于字符串的形似执行导入模块
    dd=__import__(inp)

    2.getattr:用于字符串的形式去某个模块中寻找函数
     
    imp=input("请输入执行的函数名称:")
    #getattr 用于字符串的形式去某个模块中寻找函数
    f=getattr(dd,imp,None)
    #在获取到的函数名后加(),执行函数
    #print(f,f())

    3.
    hasattr()根据字符串的形式去某个模块中判断东西是否存在
    r=hasattr(dd,imp)
    print(r)


    4.setattr(obj,name,value):
    根据字符串的形式去某个模块中设置东西(创建于内存中)
    setattr(dd,'age',18)
    r=hasattr(dd,imp)
    print(r)
    setattr(dd,'age',lambda a:a+1)
    r=hasattr(dd,'age')
    print(r)


    5.delattr()
    根据字符串的形式去某个模块中删除东西
    delattr(dd,'age')
    r=hasattr(dd,'age')
    print(r)

    6.导入其他包下的函数
    #from lib.test import com
    # print(com.f11())
    z这种方式只能导入到lib
    r=__import__('lib.test.com')
    print(r)
    <module 'lib' from 'F:\test-py3\Function\fanshe\lib\__init__.py'>
    故选择这种方式

    r=__import__('lib.test.com',fromlist=True)
    print(r.f11())

    二、一个包下的一个函数文件
    from lib import account

    url=input("请输入url:")
    uri=url.split('/')[-1] #分割url以/
    #print(uri)
    if hasattr(account,uri):
    func=getattr(account,uri)
    r=func()
    print(r)
    else:
    print('404')
    三、多个模块下的多个函数(即基于web框架的路由器)

    #格式:模块名/函数
    uri=input("请输入url:")
    url_module,url_func=uri.split('/')

    m=__import__('lib.'+url_module,fromlist=True)
    #print (m)
    if hasattr(m,url_func):
    r=getattr(m,url_func)
    f=r()
    print(f)
    else:
    print('404')
     
  • 相关阅读:
    ac与ap同步分析
    ipsec原理(转载)
    Sublime Text自定制代码片段(Code Snippets)
    IPsec分析/测试/
    jQuery 学习
    windows pip 安装 转载
    转载 pep8安装
    转载别人的ftp,觉得目录结构不错,学习
    博客园 CSS 代码定制
    AC自动机
  • 原文地址:https://www.cnblogs.com/chushujin/p/9450101.html
Copyright © 2011-2022 走看看