zoukankan      html  css  js  c++  java
  • 第十三篇 反射

    一概念

    根据字符串的形式去对象 (某个模块)中去操作其成员

    二、方法

    getattr   根据字符串的形式去对象 (某个模块)中去操作其成员

    hasattr   根据字符串的形式去某个模块中判断东西是否存在

    setattr    根据字符串的形式去某个模块中设置东西

    delattr     根据字符串的形式去某个模块中删除东西

    代码如下:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    NAME = "a"
    def f1():
        return "f1"
    
    def f2():
        return f2
    
    def f3():
        return f3
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import commonts
    
    tar_func = getattr(commonts,"f1",None)
    print (tar_func())
    tar_func()
    #根据字符串的形式去某个模块中判断东西是否存在bool
    r = hasattr(commonts,"NAME")
    print(r)
    
    #给commonts模块设置全局变量
    r1 = setattr(commonts,"AGE",18)
    print(r1)
    r = hasattr(commonts,"AGE")
    print(r)
    #给commonts模块设置函数,并且判断是否存在
    r2 = setattr(commonts,"AB",lambda a:a+1)
    r = hasattr(commonts,"AB")
    print(r)
    
    #在内存中删除commonts内存中的变量
    r3 = delattr(commonts,"NAME")
    r = hasattr(commonts,"NAME")
    print(r)

    三、以字符串的形式导入模块

    一般的导入模块是

    import 模块 as 新名字

    如果要导入lib包中的test包中的com模块如下:

    form lib.test import com

    但是上面的模块都是一个对象

    如何让导入的模块是字符串?

    如下:

    1、

    inp = input("请输入模块:")
    #用户输入的模块是字符串,真正的模块是对象,所以下面要用__import__
    inp_func = input("请输入要执行的函数:")
    #用户输入的是字符串,而不是方法,所以要用getattr方法
    #__import__ 用于以字符串的形式导入模块
    dd = __import__(inp)
    #模块中寻找函数并且执行函数
    target_func = getattr(dd,inp_func)
    #在获取到的函数名后面加上()表示,执行函数
    result = target_func()
    print(result)#这里是取的返回值

    __import__(“模块名字”):这里的模块名字是字符串

    2、

    __import__(“lib.test.com”,fromlist=True)  这个是导入其他包和包里面的模块

    问题:根据用户输入的内容,导入模块,并且执行模块中的函数

  • 相关阅读:
    B站14天数据分析笔记6次课笔记
    B站14天数据分析笔记5次课作业
    B站14天数据分析笔记5次课Pandas
    1037 在霍格沃茨找零钱 (20 point(s))
    第一章:第三节探索性数据分析
    Java没有运行选项
    Eclipse截图的时候错误提示消失/复制粘贴错误信息
    错误记录_css属性的值一定不需要引号么?
    错误记录_语法哪里错了?
    微软输入法使用
  • 原文地址:https://www.cnblogs.com/pyrene/p/6414696.html
Copyright © 2011-2022 走看看