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')
     
  • 相关阅读:
    169. Majority Element
    283. Move Zeroes
    1331. Rank Transform of an Array
    566. Reshape the Matrix
    985. Sum of Even Numbers After Queries
    1185. Day of the Week
    867. Transpose Matrix
    1217. Play with Chips
    766. Toeplitz Matrix
    1413. Minimum Value to Get Positive Step by Step Sum
  • 原文地址:https://www.cnblogs.com/chushujin/p/9450101.html
Copyright © 2011-2022 走看看