Python 从框架对象获取文档字符串

Python 从框架对象获取文档字符串,python,introspection,inspect,Python,Introspection,Inspect,我使用以下代码: 但是我还想从被调用方法中调用方的方法获取docstring。我该怎么做呢?我不一定建议这样做,但您始终可以使用globals()按名称查找函数。事情会是这样的: import inspect def B(): """test""" outerframe = inspect.currentframe().f_back functionname = outerframe.f_code.co_name docstring = globals()[ f

我使用以下代码:


但是我还想从被调用方法中调用方的方法获取docstring。我该怎么做呢?

我不一定建议这样做,但您始终可以使用globals()按名称查找函数。事情会是这样的:

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()

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


您必须使用文件名和行号信息来尝试猜测docstring可能是什么,但由于Python的动态特性,无法保证它是正确的和最新的。

函数名不一定是存储它的名称;可以像任何其他对象一样重新分配函数。它们也不总是全局的,类上的方法当然不是全局的。是的,就像我说的,当然不会推荐它,但如果你绝对需要一个小程序中的快速修复,那么它是一种可能性
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()