python中的反射

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

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


# -*- 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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值