python 反射

Posted yelao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 反射相关的知识,希望对你有一定的参考价值。

  反射:让对象告诉我们他是什么,他有什么,并获取使用

本文主要介绍 inspect 模块的使用:

inspect模块: 用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等;

Doc:这样写到

The inspect module provides several useful functions to help get information about live objects such as modules, classes, methods, functions, tracebacks, frame objects, and code objects.

这个模块是针对模块,类,方法,功能等对象提供些有用的方法。

  • getmembers(object[, predicate]): 

  这个方法是dir()的扩展版,它会将dir()找到的名字对应的属性一并返回,形如[(name, value), ...]。另外,predicate是一个方法的引用,如果指定,则应当接受value作为参数并返回一个布尔值,如果为False,相应的属性将不会返回。使用is*作为第二个参数可以过滤出指定类型的属性。

 

以下例子中展示了如何获取模块中的类,如何获取类中的方法:

import inspect
import importlib

# 导入模块
module = importlib.import_module(moduleName)

# 获取模块中的所有类
classes = inspect.getmembers(module,inspect.isclass)
 # 遍历类并过滤
for name, cls in classes:
    if issubclass(cls, TestCase):
        # 获取类中的方法
        methods = inspect.getmembers(cls,inspect.ismethod)
        for name, method in methods:
            if method.__name__.startswith("test"):
                dict = 
                    psoName: psoName,
                    className: module.__name__+"."+cls.__name__,
                    methodName: method.__name__,
                    description: method.__doc__
                 
                 dict[name] = dict[psoName]+"."+dict[className]+"."+dict[methodName]    

inspect模块的实现本质是依赖于dir与getattr:

def getmembers(object, predicate=None):
    """Return all members of an object as (name, value) pairs sorted by name.
    Optionally, only return members that satisfy a given predicate."""
    results = []
    for key in dir(object):
        try:
            value = getattr(object, key)
        except AttributeError:
            continue
        if not predicate or predicate(value):
       # 元组列表  results.append((key, value)) results.sort()
return results

 反射详细参考:https://www.cnblogs.com/huxi/archive/2011/01/02/1924317.html

以上是关于python 反射的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL片段着色器不照亮场景

将 OpenGL 片段着色器设置为仅通过漫反射减少 vec4 色点的 RGB 值,而不是 alpha

反射机制

反射机制入门

反射机制入门

反射机制入门