zoukankan      html  css  js  c++  java
  • Python反射(自省)机制

    一、动态导入模块。

    介绍反射机制之前我们先来看看什么是动态导入模块。这时候,有一个需求,那就是我们不知道用户要导入哪一个模块,这时候我们应该如何设计一个程序满足去导入用户输入的模块呢?

    假设我们现在有一个模块test(同级目录)

    def printA():
        print('AAAA')
    def printB():
        print('BBBB')
    test

    这时候我们可以在外部用__import__实现动态导入。

    imp=input('请输入要导入的模块名')
    m=__import__(imp)
    m.printA()

    上面就已经实现了动态导入模块了。比如直接输入,test即可。但是如果test模块和我们现在的程序不在同一级目录呢。我们应该怎么导入?

    假设test在,同级目录aaa下。

    m= __import__("aaa.test")  #这样仅仅导入了aaa模块,调用函数的方法是aaa.test.printA()
    
    
    m = __import__("aaa.test",fromlist = True)  #改用这种方式就能导入成功     调用方法:test.printA()

    二、反射机制

    其实上面的代码仔细一看,实际上是完全没有意义的。因为当我们不知道要导入哪一个模块的时候我们,根本不知道该去调用那个函数,所有实现动态调用函数也是很有必要的。这时候就该反射机制上场了。

    #1 hasattr(object, name).判断object是否有name函数,有则返回True
    #2、getattr(object, name,default).获得一个‘name’的参数,不存在则返回default。不设置,不存在报错
    #3、setattr(object, name, value)   可以设置数据属性也可以设置函数属性。
    #delattr(object, name)
    imp=input('请输入要导入的模块名')
    m=__import__(imp,fromlist=Truete)
    func=input('请输入你要调用的函数')
    if hasattr(m,func):
        fun=getattr(m,func)
        fun()
  • 相关阅读:
    cookie和session
    memcached安全性 django使用memcached
    spring boot jar包做成linux服务,windows服务开机启动
    sqlserver暂时停用全部外键
    jsonobject 转对象失败。
    spring bean 通过 applicationcontext 获取不到
    java spring 线程中注入bean会失败。
    浏览器预检,后台响应(转载)
    amazon redshift sql 语法 和my sql的区别
    返回视图,页面不跳转,return ModelandView 页面不能正确跳转问题
  • 原文地址:https://www.cnblogs.com/linshuhui/p/9026709.html
Copyright © 2011-2022 走看看