前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Python常用标准库及第三方库6-inspect模块(检查对象)

qiguaw 2024-12-09 16:26:30 资源文章 42 ℃ 0 评论

一、inspect-检查对象模块简介

官方文档: https://docs.python.org/zh-cn/3.7/library/inspect.html

inspect 模块提供了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。例如它可以帮助你检查类的内容,获取某个方法的源代码,取得并格式化某个函数的参数列表,或者获取你需要显示的回溯的详细信息。

该模块提供了4种主要的功能:

  1. 类型检查
  2. 获取源代码
  3. 检查类与函数
  4. 检查解释器的调用堆栈。

二、用法示例

1.获取源码

import inspect

def add(x, y): 
    """加法器"""          
    return x + y             

# 获取源码 
print(inspect.getsource(add))

# 打印结果如下:

已连接到 pydev 调试器(内部版本号 233.13135.95)

def add(x, y):

return x + y

# 获取源码文件路径                        
print(inspect.getsourcefile(add)) 

# 打印结果如下:

/Users/xxx/git_project/auto_test_project/api_test/demo/demo_inspect.py

2.获取函数的文档字符串、参数

# 获取函数的文档字符串                 
print(inspect.getdoc(add))   

# 打印结果如下:

加法器

# 获取函数参数                                 
print(inspect.signature(add).parameters) 

# 打印结果如下:

OrderedDict([('x', <Parameter "x">), ('y', <Parameter "y">)])

三、类和成员

getmembers() 函数获取对象的成员,例如类或模块。函数名以"is"开始的函数主要作为 getmembers() 的第2个参数使用。它们也可用于判定某对象是否有如下的特殊属性:

类型

属性

描述

module 模块

__doc__

文档字符串


__file__

文件名(内置模块没有文件名)

class -- 类

__doc__

文档字符串


__name__

类定义时所使用的名称


__qualname__

qualified name -- 限定名称


__module__

该类型被定义时所在的模块的名称

method 方法

__doc__

文档字符串


__name__

该方法定义时所使用的名称


__qualname__

qualified name -- 限定名称


__func__

实现该方法的函数对象


__self__

该方法被绑定的实例,若没有绑定则为 None


__module__

定义此方法的模块的名称

function -- 函数

__doc__

文档字符串


__name__

用于定义此函数的名称


__qualname__

qualified name -- 限定名称


__code__

包含已编译函数的代码对象 bytecode


__defaults__

所有位置或关键字参数的默认值的元组


__kwdefaults__

mapping of any default values for keyword-only parameters


__globals__

global namespace in which this function was defined


__annotations__

mapping of parameters names to annotations; "return" key is reserved for return annotations.


__module__

name of module in which this function was defined

generator -- 生成器

__name__

名称


__qualname__

qualified name -- 限定名称


gi_frame

框架


gi_running

生成器在运行吗?


gi_code

code


gi_yieldfrom

object being iterated by yield from, or None

1.获取模块所有的类

for name, obj in inspect.getmembers(unittest):
    if inspect.isclass(obj):
        print(obj.__name__)

# 打印结果如下:

BaseTestSuite

FunctionTestCase

IsolatedAsyncioTestCase

SkipTest

TestCase

TestLoader

TestProgram

2.获取某个类中的函数

class TestClass:               
    """测试inspect专用类的文档字符串"""   
                               
    def __init__(self, name, ag
        self.__name = name     
        self.__age = age       
                               
    def get_name(self):        
        return self.__name     
                               
    def get_age(self):         
        return self.__age      
                               
    @classmethod               
    def introduction(cls):     
        print("hello,my name is tom")          
                               
    @staticmethod              
    def show_self():           
        print("i love china")  

① 获取类方法

# 获取类方法                                                
print(inspect.getmembers(TestClass, inspect.ismethod)) 

# 打印结果如下:

[('introduction', <bound method TestClass.introduction of <class '__main__.TestClass'>>)]

② 获取类中的实例方法、静态方法

# 获取类中的实例方法、静态方法                                              
print(inspect.getmembers(TestClass, inspect.isfunction))      

[('__init__', <function TestClass.__init__ at 0x104f1f3a0>), ('get_age', <function TestClass.get_age at 0x10536a550>), ('get_name', <function TestClass.get_name at 0x10536a4c0>), ('show_self', <function TestClass.show_self at 0x10536a670>)]

③ 判断成员是不是函数方法,是则打印方法名

for i in inspect.getmembers(TestClass):                   
    if inspect.isfunction(i[1]):                          
        print(i[1].__name__)                              

# 打印结果如下:

__init__

get_age

get_name

show_self

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表