zoukankan      html  css  js  c++  java
  • python中反射(__import__和getattr使用)

    反射:

    1、可通过字符串的形式导入模块

      1.1、单层导入 

    1 __import__('模块名')
    View Code

      1.2、多层导入

    1 __import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录
    View Code

    2、可以通过字符串的形式执行模块的功能

     1 import glob,os
     2 
     3 modules = []
     4 for module_file in glob.glob("*-plugin.py"):
     5     try:
     6        module_name,ext = os.path.splitext(os.path.basename(module_file))
     7        module = __import__(module_name)
     8        modules.append(module)
     9     except ImportError:
    10        pass #ignore broken modules
    11     #say hello to all modules
    12     for module in modules:
    13        module.hello()
    进行反射py代码
    1 def getfunctionbyname(module_name,function_name):
    2     module = __import__(module_name)
    3     return getattr(module,function_name)
    __import__导入的模块

    3、反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:

     1 class Foo(object):
     2  
     3     def __init__(self):
     4         self.name = 'abc'
     5  
     6     def func(self):
     7         return 'ok'
     8  
     9 obj = Foo()
    10 #获取成员
    11 ret = getattr(obj, 'func')#获取的是个对象
    12 r = ret()
    13 print(r)
    14 #检查成员
    15 ret = hasattr(obj,'func')#因为有func方法所以返回True
    16 print(ret)
    17 #设置成员
    18 print(obj.name) #设置之前为:abc
    19 ret = setattr(obj,'name',19)
    20 print(obj.name) #设置之后为:19
    21 #删除成员
    22 print(obj.name) #abc
    23 delattr(obj,'name')
    24 print(obj.name) #报错
    View Code
  • 相关阅读:
    洛谷 P2700 逐个击破
    洛谷 P1503 鬼子进村
    洛谷 P1556 幸福的路
    洛谷 P1490 买蛋糕
    洛谷 P2507 [SCOI2008]配对
    code vs 3305 水果姐逛水果街Ⅱ
    通过idea远程调试
    【Cocos2d-x JavaScript Binding】
    ☀【SeaJS】SeaJS Grunt构建
    -_-#【Better Code】throttle / debounce
  • 原文地址:https://www.cnblogs.com/xiaoyaowuming/p/5633207.html
Copyright © 2011-2022 走看看