关于python:从框架对象获取docstring

Get the docstring from a frame object

我使用以下代码在被调用的方法中获取调用者的方法名称:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import inspect

def B():
    outerframe = inspect.currentframe().f_back
    functionname = outerframe.f_code.co_name
    docstring = ??
    return"caller's name: {0}, docsting: {1}".format(functionname, docstring)

def A():
   """docstring for A"""
    return B()


print A()

但我也希望从被调用方法中的调用者方法中获取docstring。 我怎么做?


你不能,因为你没有对函数对象的引用。 它是具有__doc__属性的函数对象,而不是关联的代码对象。

您必须使用文件名和亚麻码信息来尝试对文档字符串可能是什么进行有根据的猜测,但由于Python的动态特性不能保证是正确和最新的。


我不一定会建议它,但你总是可以使用globals()按名称查找函数。 它会是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import inspect

def B():
   """test"""
    outerframe = inspect.currentframe().f_back
    functionname = outerframe.f_code.co_name
    docstring = globals()[ functionname ].__doc__
    return"caller's name: {0}, docsting: {1}".format(functionname, docstring)

def A():
   """docstring for A"""
    return B()

print A()