对于测试驱动的教学模块,我需要按照精确的顺序检查doctests.有没有办法按照它们的定义顺序获取当前模块中的所有可调用对象?
我尝试了什么:
每个函数对象都有一个存储第一行号的代码对象,因此您可以使用:
import inspect
ordered = sorted(inspect.getmembers(moduleobj, inspect.isfunction),
key=lambda kv: kv[1].__code__.co_firstlineno)
Run Code Online (Sandbox Code Playgroud)
获得对的排序列表(name, function).对于Python 2.5及更早版本,您需要使用.func_code而不是.__code__.
您可能需要在中定义的功能进一步筛选的模块本身并没有被进口的; func.__module__ == moduleobj.__name__应该就够了.