在 Python 中检查活动对象
此模块中的函数提供了有关活动对象(如模块、类、方法、函数、代码对象等)的有用信息。这些函数执行类型检查、检索源代码、检查类和函数以及检查解释器堆栈。
getmembers()− 此函数以名称-值对列表的形式返回对象的全部成员,并按名称排序。如果提供了可选的谓词,则仅包含谓词返回值为真的成员。getmodulename() −此函数返回由文件路径命名的模块的名称,不包括封闭包的名称。
我们将使用以下脚本了解 inspect 模块的行为。
#inspect-example.py
'''This is module docstring'''
def hello():
'''hello docstring'''
print ('Hello world')
return
#class definitions
class parent:
'''parent docstring'''
def __init__(self):
self.var='hello'
def hello(self):
print (self.var)
class child(parent):
def hello(self):
'''hello function overridden'''
super().hello()
print ("How are you?")以 "__" 开头
>>> import inspect, inspect_example
>>> for k,v in inspect.getmembers(inspect_example):
if k.startswith('__')==False:print (k,v)
child
hello
parent
>>>谓词
谓词是应用于 inspect 模块中函数的逻辑条件。例如,getmembers() 函数返回给定谓词条件为真的模块成员列表。以下谓词在 inspect 模块中定义
| ismodule() | 如果对象是模块,则返回 True。 |
| isclass() | 如果对象是类(无论是内置的还是在 Python 代码中创建的),则返回 True。 |
| ismethod() | 如果对象是用 Python 编写的绑定方法,则返回 True。 |
| isfunction() | 如果对象是 Python 函数(包括由 lambda 表达式创建的函数),则返回 True。 |
| isgenerator() | 如果对象是生成器,则返回 True。 |
| iscode() | 如果对象是代码,则返回 True。 |
| isbuiltin() | 如果对象是内置函数或绑定内置方法,则返回 True。 |
| isabstract() | 如果对象是抽象基类,则返回 True。 |
这里只返回模块中的类成员。
>>> for k,v in inspect.getmembers(inspect_example, inspect.isclass):
print (k,v)
child <class 'inspect_example.child'>
parent <class 'inspect_example.parent'>
>>>要检索指定类“child”的成员 -
>>> inspect.getmembers(inspect_example.child) >>> x=inspect_example.child() >>> inspect.getmembers(x)
getdoc() 函数检索模块、类或函数的文档字符串。
>>> inspect.getdoc(inspect_example) 'This is module docstring' >>> inspect.getdoc(inspect_example.parent) 'parent docstring' >>> inspect.getdoc(inspect_example.hello) 'hello docstring'
getsource() 函数获取函数的定义代码 -
>>> print (inspect.getsource(inspect_example.hello))
def hello():
'''hello docstring'''
print ('Hello world')
return
>>> sign=inspect.signature(inspect_example.parent.hello)
>>> print (sign)inspect 模块还有一个命令行界面。
C:\Users\acer>python -m inspect -d inspect_example Target: inspect_example Origin: C:\python36\inspect_example.py Cached: C:\python36\__pycache__\inspect_example.cpython-36.pyc Loader: <_frozen_importlib_external.SourceFileLoader object at 0x0000029827BD0D30>
以下命令返回模块中“Hello()”函数的源代码。
C:\Users\acer>python -m inspect inspect_example:hello
def hello():
'''hello docstring'''
print ('Hello world')
return
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP