zoukankan      html  css  js  c++  java
  • Python高手之路【十】python基础之反射

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

     

    需求:由用户输入一个模块名,用户输入什么模块名,文件中就导入什么模块:

    1:文件都在同一目录下的导入

    在同一目录下建立两个文件,index.py , commons.py

    commons.py文件内容如下:

     

    def f1():
        return "F1"
    def f2():
        return 'f2'

     

    在index.py文件中书写代码:

    m = input('input module : ')
    module = __import__(m)#module相当于import modulename as f形式中的别名
    print(module.f1())
    

    使用 __import__('模块名')的方式导入模块!为什么要使用这种方式导入模块,而不使用 import modulename方式导入呢?因为用户输入进来的都是字符串,而import modulename方式,modulename不是一个字符串!

    此时执行index.py文件,就能正常导入模块,接收f1函数中的返回值:

     

    需求:上面已经实现用户输入模块名就导入哪个模块,现在要求由用户再输入函数名,然后文件中就执行该模块中的对应的函数

    m = input('input module : ')#用户输入模块名
    f = input('input func name : ')#用户输入函数名
    
    module = __import__(m)#导入用户输入的模块
    func = getattr(module,f)#调用用户输入的函数
    
    print(func())
    

     

    如果commons模块与index.py文件不在同一目录的导入:假如commons.py文件在lib/commons.py下

    module = __import__('lib.'+m,fromlist=True)#导入用户输入的模块

    附录:

    getattr(object,name) :获取指定模块中的指定成员

    hasattr(object,name):判断指定模块中是否存在指定成员

    delattr(object,name):删除指定模块中的指定成员!不影响原文件,只是在内存中删除

    setattr(object,name,value):给指定模块增加一个成员!不影响原文件,只是在内存中增加

     

  • 相关阅读:
    关于 __bridge
    关于loadView
    关于ViewDidUnload
    55. Jump Game(中等)
    54. Spiral Matrix(中等)
    48. Rotate Image(中等)
    34. Search for a Range
    18. 4Sum(中等)
    16. 3Sum Closest(中等)
    41. First Missing Positive(困难, 用到 counting sort 方法)
  • 原文地址:https://www.cnblogs.com/ginvip/p/6263028.html
Copyright © 2011-2022 走看看