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
  • 相关阅读:
    eclipse 添加.gitignore
    HTTP method POST is not supported by this URL
    Nodejs 如何解决每次向后台发起请求时判断用户是否处于登录状态?
    Servlet 全局验证是否登录
    会员管理系统的设计和开发(1)
    C程序模拟实现银行家算法
    XPath Helper:chrome爬虫网页解析工具 Chrome插件
    scrapy爬虫出现Forbidden by robots.txt
    廖雪峰
    Nodejs中export的作用
  • 原文地址:https://www.cnblogs.com/xiaoyaowuming/p/5633207.html
Copyright © 2011-2022 走看看